子类构造方法
子类继承父类的成员变量,那父类的成员变量怎么初始化呢?
要先初始化父类成员,子类的构造方法才能完成
class Animal{ public String name; public int age; public Animal(String name,int age) { this.name = name; this.age = age; } } class Dog extends Animal{ //子类构造方法 public Dog(String name, int age){ //只能调用一个构造方法,并且只能在第一行 super(name,age);//调用父类的构造方法,帮助子类从父类继承的成员初始化 } //普通成员方法 public void bark () { System.out.println(this.name+"在汪汪叫"); } } class Cat extends Animal{ public Cat(String name, int age) { super(name,age); } public void miao() { System.out.println(this.name+"在喵喵叫"); } } public class Test { public static void main(String[] args) { Dog dog = new Dog("小小",10); dog.bark(); Cat cat = new Cat("啾啾",8); cat.miao(); } }
super和this
【相同点】
- 都是Java中的关键字
- 只能在类的非静态方法中使用,用来访问非静态成员方法和字段
- 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在
【不同点】
4. this是当前对象的引用,super相当于是子类对象中从父类继承下来部分成员的引用
2. 在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性
5. 在构造方法中:this(…)用于调用本类构造方法,super(…)用于调用父类构造方法,两种调用不能同时在构造方法中出现
6. 构造方法中一定会存在super(…)的调用,用户没有写编译器也会增加,但是this(…)用户不写则没有
继承关系上的执行顺序
- 父类静态代码块优先于子类静态代码块执行,且是最早执行
- 父类实例代码块和父类构造方法紧接着执行
- 子类的实例代码块和子类构造方法紧接着再执行
- 第二次实例化子类对象时,父类和子类的静态代码块都将不会再执行
protected 关键字
为了实现封装特性,Java中引入了访问限定符,主要限定:类或者类中成员能否在类外或者其他包中被访问。
在不同包中的子类,调用protected修饰的成员变量
继承方式
事物与事物之间的关系是很复杂的,在Java中只支持以下几种继承方式
总结:Java中不支持多继承,不希望出现超过三层的继承关系
final 关键字
nal关键可以用来修饰变量、成员方法以及类。
- 修饰变量或字段,表示常量(即不能修改)
意思就是final修饰的变量,固定写死,不能再初始化了,
因此这个a叫做常量
finalinta=10; a=20; //编译出错
- 修饰类:表示此类不能被继承
final修饰了Test3类,Test类就不能继承Test3类了
因此这个Test3类叫做密封类
总结
学了很多知识点,一段代码有好几个关键字和方法啥的,开始进入混乱期…坚持就是胜利…