初始Java17(继承和转型)
学习内容:
1、Java中的继承
Java中的继承使用关键字 extends 表示
- class 子类 extends 父类 { }
使用继承,子类可以拥有父类中的非私有属性,即父类中的非私有属性可以供子类共享,这样多个类中相同的属性就可以抽取出来作为父类管理
注:Java不支持多继承,一个类只能继承一个类,即子类只能继承一个父类,但是一个父类可以被多个子类继承
2、super 关键字
在Java继承中,子类可以使用 super 关键字调用父类的非私有属性和非私有方法,还可以调用父类的非私有构造方法
(1)使用 super 关键字调用父类属性
- super . 父类属性(super 关键字可以省略)
- super . 父类方法
(2)使用 super 关键字调用父类的构造方法
使用 super 调用父类的构造方法与使用this 调用构造方法有异曲同工之处,如果使用 super (),则是调用父类的无参构造方法;如果 super (参数),则是调用父类有参数的构造方法
//调用父类的属性 name
String name = super.name;
//调用父类的方法 getAge()
public void test() {
super.getAge();
}
//调用父类构造函数
public Student() {
super("sky",26);
}
(3)子类和父类构造方法的执行顺序
- 子类默认调用父类的无参构造方法,也就是说,子类的构造方法中会默认调用 super (),并且在构造方法的第一行
- 如果子类只提供有参的构造方法,则必须在子类的构造方法中调用父类的构造方法
- 执行完父类的构造方法后,再调用本类中的构造方法
注:为了更好地继承类,每个父类都应该提供无参的构造方法,避免造成没有构造方法而造成继承错误
3、Java中多态的实现
Java中多态的体现具体表现在方法的重载和覆盖上
覆盖主要是指子类重写了父类中的方法
子类重写父类中的方法,即子类中的方法与父类中的方法保持一致,但是方法的修饰符一定要大于等于父类中方法的修饰符
4、类型检测——向上转型 / 向下转型
(1)向上转型
向上转型是指父类对象的引用指向子类对象
- 父类 对象 = new 子类()
package day01;
public class Father {
public void say() {
System.out.println("father say()");
}
public static void main(String[] args) {
//向上转型
Father son=new Son();
son.say();
}
}
class Son extends Father{
public void say() {
System.out.println("son say()");
}
}
结果为: son say( )
因为父类对象的引用指向的是一个子类,所以打印方法也会是子类的方法
注意:有时使用向上转型会丢失掉子类特有的方法,例如:
(2)向下转型
- 父类 对象1 = new 子类();子类 对象2 = (子类)对象1
使用向下转型必须使用(类型) 进行强转
package day01;
public class Father {
public void say() {
System.out.println("father say()");
}
public static void main(String[] args) {
//向上转型
Father son=new Son();
//向下转型
Son son2=(Son)son;
son2.sayMe();
}
}
class Son extends Father{
public void say() {
System.out.println("son say()");
}
public void sayMe() {
System.out.println("son sayMe()");
}
}
注意:不能将父类对象强转成子类对象,例如:
在开发中,凡是用到继承,我们应该第一想到使用向上类型转换
遇到的问题:
1、转型问题不太理解
https://www.cnblogs.com/wangtianze/p/6691216.html
明天要学习的内容:
5.2.3 动态绑定 5.3 static 关键字 5.4 final 关键字