Java 高级特性之多态

1、多态的定义

指父类的某个方法被子类重写时,可以产生自己的功能行为,子类对象调用同名方法时优先调用子类重写的方法。
实现前提:
1、必须有继承或接口的实现
2、子类对象指向父类的引用
3、通过父类对象掉用方法时,调用的子类对象方法。
语法: 子类 对象名 =new 子类();
Cat cat=new Cat()
Animal animal=new Cat();

public class Animal {//Animal类,父类
 public void bark() {
  System.out.println("叫叫叫");
 }
 public void showbark(Animal animal) {
  animal.bark();
 }
}

class Cat extends Animal {//猫咪类继承动物类
 @Override
 public void bark() {
  System.out.println("喵喵喵");
 }
 @Override
 public void showbark(Animal animal) {
  animal.bark();
 }
}
class Dog extends Animal {//狗类继承动物类
 @Override
 public void bark() {
  System.out.println("汪汪汪");
 }
 @Override
 public void showbark(Animal animal) {
  animal.bark();
 }
 public void Seehome() {
  System.out.println("看家!");
 }
}

public static void main(String[] args) {//测试类
 //多态
 Animal animal=new Animal();
 animal.showbark(animal);
 System.out.println("----------");
 Dog dog=new Dog();
 dog.Seehome();
 dog.showbark(animal);
 System.out.println("----------");
 Dog animal1=(Dog) new Animal();
 animal1.Seehome();
 System.out.println("---------");
 //传统
 Cat cat=new Cat();
 //cat.bark();
 cat.showbark(dog);
}

对象转型 上转型和下转型

2.1上转型对象

如果A类是B类的父类,当我们创建子类对象时,并把这个对象引用到父类的对象中时,称为子类对象的上转型。
例如:A a;
B b=new B() ;//A a=new B();
a=b;
称父类对象a是子类对象b的上转型对象。(就好像说:老虎是哺乳动物。)

特点:

1、上转型对象由子类负责创建,转型为父类对象,会失去子类的一些属性和功能。
子类对象:新增方法、变量;继承的变量,继承或重写的方法;
上转型对象:只剩继承的变量,继承或重写的方法发。
2、不能操作子类对象的新增成员变量和方法(已丢失)。
3、如果子类重写了父类的某个方法,上转型对象调用此方法时一定是调用重写的方法。

public static void main(String[] args) {
 A a1=new A();
 A a2=new B();//a2显然是B类子对象的上转型对象
 //这里的话a2只能调用B类重写了A类和继承至A类的方法。
 B b=new B();
 C c=new C();
 D d=new D();
 System.out.println(a1.show(b));
 System.out.println(a1.show(c));
 System.out.println(a1.show(d));
 System.out.println(a2.show(b));
 System.out.println(a2.show(d));
 System.out.println(b.show(b));
 System.out.println(b.show(c));
 System.out.println(b.show(d));
}
}
class A{
 public String show(D obj) {
  return ("A and D");
 }
 public String show(A obj) {
  return ("A and A");
 }
}
class B extends A{
 public String show(B obj){//a2是上转型对象,
 //所以不能调用B类的新增方法public String show(B obj)

  return ("B and B");      
 }
 public String show(A obj) {
  return ("B and A");
 }
}
class C extends B{
 
}
class D extends B{
 
}

2.2下转型对象

可以将一个对象的上转型对象强制转换到一个下转型对象,这时该子类对象又具备了子类所有的属性和功能。(转型前的对象必须是转型后对象的上转型对象才能被下溯。)

3.0Java的绑定原理

java的绑定机制有两种:
1、编译期间进行的绑定(静态绑定、前期绑定)
对象的属性以及对象的类方法与变量的声明类型进行绑定。
2、 java在运行时动态决定实例方法的调用(后期绑定,late binding)
根据引用的实体来决定实例方法的调用。(正因为动态绑定才实现了Java的多态行为)

扩展:instanceof

判断当前对象是否是一个类的实例。
eg:

 System.out.println("----------");
 System.out.println(cat instanceof Animal);
 System.out.println(cat instanceof Cat);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值