Java多态
2023/5/9大约 1 分钟
多态
多态的概念
父类引用可以指向多个子类对象
Animal animal;
animal=new Dog();
animal=new Cat();多态的实现形式
- 通过继承
- 通过接口
变量声明
- 多态作为变量声明
- 调用方法的时候根据引用变量具体的对象类型来决定
- 调用方法属性的时候,根据引用变量的声明来决定
package 面向对象.基础;
public class test3 {
public static void main(String[] args) {
Animal animal;
animal=new Cat();
animal.eat();
System.out.println(animal.name);
}
}
class Animal{
String name="animal";
public void eat(){
System.out.println(this.name+"吃");
}
}
class Cat extends Animal{
String name="Cat";
public void eat(){
System.out.println(this.name+"吃");
}
}多态成员特点
- 方法调用:编译看左边,运行看右边
- 属性调用:编译看左边,运行看左边
- 静态方法:编译看左边,运行看左边
- 静态属性:编译看左边,运行看左边
多态方法调用案例
package 面向对象.基础;
public class test4 {
static void go(Base base){
base.add(8);
System.out.println(base.i);
}
public static void main(String[] args) {
go(new myBase());//在自己的无参构造函数中,先去调用父类的无参构造函数,在父类的add方调用的时候看得是运行时候的对象
}
}
class Base{
int i;
Base(){
System.out.println("进入构造1");
add(1);
}
public void add(int v){
i+=v;
}
}
class myBase extends Base{
public void add(int v){
System.out.println("进入");
i+=2;//首先第一步进入这里
}
}instanceof关键字
- instanceof:用于判断变量属于什么类型
final关键字
final Base b=new myBase();
//b=new myBase();
b.i=3;//final引用对象地址不能变,但内容可以变