java基础·小白入门(三)

2024-06-20 06:28
文章标签 java 入门 小白 基础

本文主要是介绍java基础·小白入门(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 类的继承
    • 基本概念
    • 方法覆盖
    • Object类
  • 抽象类
  • 接口
  • 枚举和包
    • 枚举

类的继承

基本概念

  1. 继承是一种由已有的类创建新类的机制。
  2. 在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。
  3. 子类继承父类的全部属性和行为,并可以根据需要增加自己新的属性和行为。
  4. Java不支持多继承(子类只能有一个父类)。
  5. 构造方法的继承:每个子类构造方法的第一条语句,都是隐含地调用super(),即父类无参构造方法。若要调用父类带参构造方法,可显式调用super(参数); 该句必须放第一行。
  6. 在子类中访问父类的成员:访问父类变量:super.变量名;访问父类方法:super.方法名

方法覆盖

  1. 覆盖与重载相似,均是Java“多态性”的体现。
  2. 覆盖是指在子类中,定义名称、参数个数与类型、返回类型均与父类完全相同的方法,用来重写父类里同名方法的功能。
  3. 覆盖发生在子类与父类之间(方法头完全相同)。而重载是指在同一个类里定义名称相同,参数不同的方法。
  4. 在子类中覆盖方法时,可扩大父类中的方法访问权限,但不能缩小其权限
  5. final成员与final类:final关键字可用于定义常量。final关键字修饰方法时,父类的方法不会被子类覆盖。final关键字修饰类时,final类无法再派生其他子类,通常称为“最终类”。
  6. 用父类的引用变量访问子类成员:只限于“覆盖”的情况发生,访问到的是子类方法。如果用父类的引用变量访问子类成员的新方法(该方法父类没有),则会出现编译错误。
// 格式:父类 对象名 = new 子类(); 对象名.子类方法;// 方法举例
class Parent {void display() {System.out.println("父类方法");}
}class Child extends Parent {@Overridevoid display() {  // 方法覆盖System.out.println("子类方法");}void specificMethod() {System.out.println("子类特殊方法");}
}public class Main {public static void main(String[] args) {Parent obj = new Child();  // // 访问的是子类的覆盖方法obj.display(); // 输出:子类方法// 不能访问子类特有的方法// obj.specificMethod(); // 报错}
}

Object类

  1. Object类是万类之父,所有的类均直接或间接继承于它。
  2. 如果一个类没有从别的类继承而来,即:无extends关键字,则该类默认为java.lang.Object类的子类
  3. 举例:Object类中的equals 方法。equals 方法在 Object 类中定义,默认实现是比较对象的内存地址(即是否是同一个对象)这一点和==类似,== 运算符比较的是两个对象的内存地址,即它们是否引用同一个对象。。但是许多类(如 StringIntegerList 等)会覆盖 equals 方法,以便根据对象的内容进行比较。例如,String 类中的 equals 方法被覆盖为按内容比较两个字符串是否相等。
  4. toString()方法的使用。toString()方法的功能是将对象的内容转换成字符串,并返回该字符串。若a是类A的对象,当对象a作为println()的参数时,Java会先用对象a来调用toString()方法,再把结果作为println()的参数输出。
System.out.println(a);
// 相当于:
System.out.println(a.toString());//将a转换成字符串,再由println()输出
// 如果没有重写toString方法,将使用 `Object` 类中的默认实现。结果类似:A@6b97fd// 覆盖Object类的toString()方法举例
class A { private  int  num;public A(int a){num=a;}public  String toString() {         //覆盖toString()方法String str=" toString() called,num="+num;return  str;}
}
public class Example {public static void main(String  args[]) {A a = new A(2); 	System.out.println(a.toString());  // 结果:toString() called,num=2}
}
  1. getClass()方法的使用。如果想知道某个对象obj是属于哪个类时,可用obj.getClass()来查询。例:Class ca=a.getClass();这里用变量a调用getClass()方法。
  2. 对象运算符instanceof:可利用对象运算符instanceof来测试一个指定对象是否是指定类或它的子类的实例,若是,则返回true,否则返回false。

抽象类

  1. 创建抽象类的目的:为它派生出的一整组类做一个顶层设计。其作用类似“模板”,目的是根据它的格式来创建子类。
  2. 抽象类无法实例化,即不能用new运算符来创建实例对象。它只能被继承。
  3. 在类中没有方法体的方法,就是抽象方法。抽象方法必须加关键字abstract
  4. 如果一个类中至少含有一个抽象方法,则为抽象类。抽象类必须在class前加上abstract关键字修饰。
  5. 抽象类的子类必须实现父类中的所有抽象方法,否则它也是抽象类。
  6. 可以将一个没有任何抽象方法的类声明为abstract,避免由这个类生成任何对象。
// 定义一个抽象类 Animal
abstract class Animal {// 抽象方法abstract void makeSound();
}
// Dog 类继承自 Animal
class Dog extends Animal {void makeSound() {System.out.println("汪汪");}
}
// Cat 类继承自 Animal
class Cat extends Animal {void makeSound() {System.out.println("喵喵");}
}public class Main {public static void main(String[] args) {var myDog = new Dog();var myCat = new Cat();myDog.makeSound();myCat.makeSound();}
}

接口

  1. 接口中所有的方法都默认为public abstract
  2. 接口中可以有数据成员,这些数据成员默认都是public static final,必须赋初值。所以接口中定义的变量都是常量,可以实现不同类之间常量共享。
  3. 接口的修饰符可以是publicabstract,其中abstract在缺省时也有效。为了在不同包之间互访接口,故接口常定义为public。
  4. 和public类一样,public接口也必须定义在与接口同名的文件中
  5. 接口也具有继承性,一个接口可以继承自另一个接口。使用extends关键字定义一个接口是某个已存在的父接口的子接口,它将继承父接口的所有属性和方法。
  6. 一个类可以通过关键字implements实现接口。如果一个类既要继承父类,又要实现接口,则需注意先后顺序:extends必须放在implements前面。
  7. Java中不允许类的多继承,但允许接口的多继承
  8. 一个类只能有一个直接父类,但是它可以同时实现若干个接口。一个类实现多个接口时,在implements子句中用逗号分隔各个接口名。
interface Math
{double PI=3.1415926;	
}
class Arithmetic implements Math
{double roundArea(double radius){return PI*radius*radius;		}
}
class Student
{public static void main(String[] args){Arithmetic a=new Arithmetic();System.out.println(a.roundArea(3));System.out.println(Math.PI);  // 结果为:3.1415926		System.out.println(Arithmetic.PI);  // 结果为:3.1415926System.out.println(a.PI);  // 结果为:3.1415926}
}// 接口的继承
interface Sittable
{void sit();
}
interface Lie
{void sleep();
}
interface Chair extends Sittable  // 单继承
{
}
interface Sofa extends Sittable, Lie  // 多继承
{
}
  1. 接口中的默认方法用default修饰符来定义,默认方法可以被子接口或被该接口的实现类所继承。子接口或实现类中若定义名称相同的默认方法,则父接口中的默认方法被隐藏。默认方法default有利于接口进化,和避免代码冗余。
  2. 接口中可以定义静态方法使用static关键字,默认的访问修饰符是public。该静态方法不能被子接口继承,也不能被实现类继承。接口的静态方法使用“接口名.方法名()”的形式访问。
  3. 可以在接口中定义私有方法。私有方法通常实现某种行为,这些行为可以被默认方法调用。

冲突问题

  1. 如果子接口中定义了与父接口同名的常量或同名的方法,则父接口中的常量被隐藏,方法被覆盖。
  2. 对于常量,如果多个父接口中有同名的常量,则子接口不能继承,但子接口中可以定义一个同名的常量。
  3. 对于多个父接口中存在同名的方法时,可以用委托方式解决:接口名.super.方法名();

枚举和包

枚举

  1. 枚举类型是一种特殊的引用类型,它的声明和使用与类和接口类似。声明使用enum关键字。
  2. 枚举成员默认被final public static修饰。
  3. 枚举类型都隐含地继承了java.lang.Enum抽象类,Enum类又是Object类的子类,同时实现了Comparable<T>接口。
  4. 在枚举类型的声明中,除了枚举常量外还可以声明构造方法,成员变量和其他方法。
public enum Direction{EAST, SOUTH, WEST, NORTH;
}

  1. 为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,Java引入了包(package)。
  2. 在程序中可以创建自己的包。 格式:package 包名;
  3. package语句必须是文件中的第一条语句。也就是说,在package语句之前,除了空白和注释之外不能有任何语句。
  4. 一个源程序文件通常称为一个编译单元(compile unit)。每个编译单元可以包含一个package语句、多个import语句以及类、接口和枚举定义
  5. 一个编译单元中最多只能定义一个public类(或接口、枚举等),并且文件名与该public类名或接口名或枚举名相同。
  6. 如何取包名:建议将域名反转过来,中间用点号分隔作为包的名称,因为域名是全球唯一的,以这种方式定义的包名也是全球唯一的。假设一个域名为xy.boda.com,那么创建的包名可以为com.boda.xy,创建的类都存放在这个包下,这些类就不会与任何人的类冲突。

这篇关于java基础·小白入门(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1077353

相关文章

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

墨刀原型工具-小白入门篇

墨刀原型工具-小白入门篇 简介 随着互联网的发展和用户体验的重要性越来越受到重视,原型设计逐渐成为了产品设计中的重要环节。墨刀作为一款原型设计工具,以其简洁、易用的特点,受到了很多设计师的喜爱。本文将介绍墨刀原型工具的基本使用方法,以帮助小白快速上手。 第一章:认识墨刀原型工具 1.1 什么是墨刀原型工具 墨刀是一款基于Web的原型设计工具,可以帮助设计师快速创建交互原型,并且可以与团队

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

C++必修:模版的入门到实践

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C++学习 贝蒂的主页:Betty’s blog 1. 泛型编程 首先让我们来思考一个问题,如何实现一个交换函数? void swap(int& x, int& y){int tmp = x;x = y;y = tmp;} 相信大家很快就能写出上面这段代码,但是如果要求这个交换函数支持字符型

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前