继承与多态,Instanceof关键字
关于方法的重载和重写的笔记在之前的 方法中有写的 这里就不在写了。
1-1 概述:
子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,子类具有和父类相同的行为(代码可以复用),子类还可以重写父类的方法实现功能的扩展
关键字:
extends
1-1-2 格式:
public class A extends B{}
A : 子类,派生类
B :父类,超类,superclass
1-1-3 继承规定:
java中类的继承性:一个类只能有一个父类
支持多重继承
package 第二章; public class Car { //属性 private String brand;//品牌 private String name;//名字 private String color;//颜色 private String vin;//车架号 //构造方法 public Car() { } public Car(String name) { this.name = name; } public Car(String name,String color) { this.name = name; this.color = color; } //方法 public void Run() { System.out.println("汽车会跑"); } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getVin() { return vin; } public void setVin(String vin) { this.vin = vin; } } System.out.println("--------------------") package 第二章; import org.junit.Test; //卡车类 public class Truck extends Car { //属性 private String load;//载重量 //方法 /*public void Run() { System.out.println("卡车能跑"); }*/ @Test public void canLoad() { System.out.println("卡车能拉货"); } public String getLoad() { return load; } public void setLoad(String load) { this.load = load; } } System.out.println("--------------------") package 第二章; public class CarTest { public static void main(String[] args) { Car a = new Truck(); a.Run(); a.setColor("白色"); a.setName("model3"); System.out.println(a.getName()); System.out.println(a.getColor()); //调用子类的属性 if( a instanceof Truck) { Truck t = (Truck)a; ((Truck) a).canLoad(); } /*Truck t2 = new Truck(); t2.canLoad(); t2.Run();*/ } }
2-1 super关键字
super表示父类的,可以用来调用:属性,方法,构造器
使用:
在子类的方法或构造方法中通过使用super.属性或super.方法来调用。
3-1 多态性
概述:
多种形态,父类的引用指向子类的对象(或子类的对象赋给父类的引用)。通俗来讲就是:一个父类可以有多个子类,而子类根据需求对继承过来的方法进行重写,每个子类重写的代码有不同,自然表现的形式也不一样,如果用父类的变量去引用不同的子类对象在调用方法的同时得到的结果也是不同的,这就是所谓的多态
<!--左表示父类的声明 ,右边是父类的子类对象-->
使用:
当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法,但是只能调在父类中声明的方法,不能调用自己扩展的(属性)
<!--编译看左边,执行看右边-->
使用前提:
1.要有类的继承关系
2.要有方法的重写(子类重写父类)
3.只适用方法,不适用属性
3-1 Instanceof关键字(在后面的章节里会有体现使用的)
如何在多态中使用子类特有的属性和方法?
答:强制类型转换(向下转换)
子类 名 = (子类) 父类;
可能会出现ClassCasteException异常(类型转换异常)
为了解决上述异常引入了关键字instanceof;
使用
a instanceof A:判断对象a是否是类A的实例,如果是返回true反之相反。后面跟上向下转型
概述:
如果 a instanceof A,返回true,那么a instanceof 父类也是true;反之不一定