多态

多态(掌握)
(1)同一个对象在不同时刻体现出来的不同状态。
(2)多态的前提:
A:有继承或者实现关系。
B:有方法重写。
C:有父类或者父接口引用指向子类对象。
多态的分类:
a:具体类多态(几乎少用)
class Fu {}
class Zi extends Fu {}
Fu f = new Zi();
b:抽象类多态 (常用)
abstract class Fu {}
class Zi extends Fu {}
Fu f = new Zi();
c:接口多态          (经常用)
interface Fu {}
class Zi implements Fu {}
Fu f = new Zi();
(3)多态中的成员访问特点
A:成员变量
编译看左边,运行看左边
B:构造方法
子类的构造都会默认访问父类构造
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看左边

为什么?
因为成员方法有重写。
(4)多态的好处:
A:提高代码的维护性(继承体现)
B:提高代码的扩展性(多态体现)
(5)多态的弊端:
父不能使用子的特有功能。
现象:
子可以当作父使用,父不能当作子使用。
(6)多态中的转型
A:向上转型
从子到父 
                   Fu f =new Zi( );
B:向下转型
从父到子
                            Zi z=(Zi)f;
多态错误:1、不能直接把父类创建对象给子类,除非强转
                2、不同对象之间不能转换,不兼容类型,类名异常
                3、父类不能访问子类的特有方法
多态成员成员访问案例1:

[java]  view plain copy
  1. class A {  
  2.       
  3.     public void show2() {  
  4.         System.out.println("我");  
  5.     }  
  6. }  
  7. class B extends A {  
  8.     public void show2() {  
  9.         System.out.println("爱");  
  10.     }  
  11. }  
  12. class C extends B {  
  13.       
  14.     public void show2() {  
  15.         System.out.println("你");  
  16.     }  
  17. }  
  18. public class DuoTaiTest4 {  
  19.     public static void main(String[] args) {  
[java]  view plain copy
  1. class A {  
  2.       
  3.     public void show2() {  
  4.         System.out.println("我");  
  5.     }  
  6. }  
  7. class B extends A {  
  8.     public void show2() {  
  9.         System.out.println("爱");  
  10.     }  
  11. }  
  12. class C extends B {  
  13.       
  14.     public void show2() {  
  15.         System.out.println("你");  
  16.     }  
  17. }  
  18. public class DuoTaiTest4 {  
  19.     public static void main(String[] args) {  
[java]  view plain copy
  1. <span style="white-space:pre">        </span>//创建子父类多态  
  2.         A a = new B();  
  3.         a.show2();//爱,编译看左边,看父类有没有方法,运行看右边,打印子类的方法  
  4.         B b = new C();  
  5.         b.show2();//你,<span style="font-family: Arial, Helvetica, sans-serif;">编译看左边,看父类有没有方法,运行看右边,打印子类的方法</span>  
  6.   
  7.     }  
  8. }  
[java]  view plain copy
  1. <span style="white-space:pre">        </span>//创建子父类多态  
  2.         A a = new B();  
  3.         a.show2();//爱,编译看左边,看父类有没有方法,运行看右边,打印子类的方法  
  4.         B b = new C();  
  5.         b.show2();//你,<span style="font-family: Arial, Helvetica, sans-serif;">编译看左边,看父类有没有方法,运行看右边,打印子类的方法</span>  
  6.   
  7.     }  
  8. }  

多态成员成员访问案例2: 南北方人案例


class Person{
public void eat (){
System.out.println("吃饭");
}
}
class SouthPerson extends Person{
public void eat (){
System.out.println("吃甜豆腐,喝豆浆");
}
public void speak (){
System.out.println("矮小,坚韧");
}
}
class NorthPerson extends Person{
public void eat (){
System.out.println("吃咸豆腐,喝牛奶");
}
public void boast (){
System.out.println("吹牛,侃大山");
}
}
 
class DuoTai
{
public static void main(String[] args)
{
Person p = new SouthPerson();
p.eat();//吃甜豆腐,喝豆浆
System.out.println("--------------");
//强转南方人
SouthPerson sp =(SouthPerson)p;//将父类地址值强转给子类
sp.eat();//吃甜豆腐,喝豆浆
sp.speak();//抵抗,不怕死
System.out.println("--------------");
//转北方人
p = new NorthPerson();//父类被改变北方人的地址
p.eat();//吃咸豆腐,喝牛奶
//p.boast();//父类不能调用子类特有方法
NorthPerson np =(NorthPerson)p;
np.eat();
np.boast();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值