文章目录
一、继承格式
非常重要的部分!!!
- 格式:先描述父类,再描述子类,子类通过extends继承父类。
class Person() { } class Student() extends Person { }
继承了父类的属性和方法,自己也可以拥有属性和方法。
二、子类实例化内存分析
继承的概念:继承是子类继承父类的特征和行为(属性和方法),使得子类对象(实例)具有父类的实例域和方法,使子类具有父类相同的行为。
- 继承的规则:Java中只有单继承和多重继承,没有多继承。
- 生活例子理解:
- 单继承:一个孩子有一个父亲,继承了父亲的行为和特征;
- 多重继承:一个孩子有一个父亲,他的父亲还有一个父亲,孩子继承了爷爷的行为和特征;
- 多继承:一个孩子有多个父亲(错误示范),继承哪个父亲的行为和特征?继承会发生错乱。
注意:一个子类只能有一个父类。
- 子类和父类的创建过程:当我们创建子类对象时,内部会首先创建父类对象,父类对象创建完毕之后才会创建子类对象,并且父类对象会作为子类对象中的super存在。
- 简单来说就是子类拥有了一个父类的内存地址,两个类互相持有对象名称,可以操作父类中public和protected修饰的属性和方法,私有的无法直接操作,可以使用get、set方法获取和设置。
三、super详解
通过supper操作内存中的父对象,创建子对象时自动创建父对象。通过supper可以访问:
- 父类构造方法
- 调用super构造方法的代码,必须写在子类构造方法的第一行。
- 父类属性
- 父类的方法
默认通过无参构造方法来访问,如果父类没有无参构造方法,那子类继承时必须明确写出super来进行调用。
四、重写
1、重写的概念
方法的重写,在类的继承中发生。当继承的某方法不适用子类执行程序时,就把该方法重写一下,当程序执行时,就运行的是重写的这段逻辑。
重写(override)规则:
- 参数列表:必须完全与被重写方法的相同
此时在main方法中调用say()方法:class Person { public void say() { System.out.println("父类中的内容"); } } class Student extends Person { public void say() { System.out.println("子类中的内容"); } }
输出结果为:public class Test { public static void main(String[] args) { Student s = new Student(); s.say(); } }
- 子类父类中存在同样的方法,运行的是子类,这种情况就是重写。参数列表完全一样。
-
返回类型:必须完全与被重写方法相同
-
访问权限:子类不能比父类权限更低
子>=父的访问权限
-
父类的成员方法只能被它的子类重写
必须存在继承关系
-
声明为static和private的方法不能被重写,但是能再次声明
静态的跟对象没有关系,本身不存在继承,可以再次声明。
私有的方法不能重写,不能继承更不能重写。
- 作用:设计了一个父类,包含了程序的执行流程,但另一个类对服务器进行的指令不同,此时这个类就需要继承父类,并重写子类中的方法。
2、重写和重载的区别
-
面试题:Java中重写(override)和重载(overload)的区别?
-
发生的位置
重载:一个类中
重写:子父类中
-
参数列表限制
重载:必须不同
重写:必须相同
-
返回值类型
重载:与返回值类型无关
重写:返回值类型必须一致
-
访问权限
重载:与访问权限无关
重写:子的访问权限必须不小于父的访问权限
-
异常处理
重载:与异常无关
重写:异常范围可以更小,但是不能抛出新的异常
-
五、final关键字
-
final用于修饰属性、变量
-
变量成为了常量,无法对其再次进行赋值。
-
final修饰的局部变量只能赋值一次(可以先声明后赋值)
-
final修饰的是成员属性,必须在声明时赋值
-
全局常量(public static final)
任何位置都可以通过类名直接访问的常量。
常量的命名规范:
- 由1个或多个单词组成,单词与单词之间用_隔开,单词中所有字母大写
- 例如:SQL_INSERT
-
-
-
final用于修饰类
- final修饰的类,不可以被继承。
-
final用于修饰方法
- final修饰的方法,不能被子类重写。
六、抽象类
1、抽象类的概念
一个类中有一个抽象方法(不确定的方法),就称其类为抽象类。
-
抽象类格式:不写修饰符默认是public,default效果不存在。
abstract class 类名{ // 抽象类 }
-
抽象方法格式:abstract修饰且没有方法体,就是抽象方法。
public abstract void 方法名