Java 学习多态笔记

风格不统一 提交于 2020-01-31 09:30:42
一. 多态
    同一个对象在不同时期表现的出不形态,要构成多态必须满足以下三个前提
    1.要有继承或实现
    2.有方法的重写
    3.有父类的引用指向对象
    eg:
    public class Animal {
        public String name ="动物";
        public void Eat(){
            System.out.println("我是"+name);
            System.out.println("吃东西");
        }
    }
    public class Cat extends Animal { // 1.有继承
        public void Eat(){ // 2.有方法重写
            System.out.println("猫吃鱼");
        }
    }
    public class DuoTaiDemo {
        public static void main(String[] args) {
            Animal a = new Cat();  // 3. 有父类引用指向
            a.Eat();
        }
    }
二.多态的成员访问特点:
  对于成员变量:编译看左边,执行也看左边 (以左边的类为准,调用的都是左边类中的成员方法 即 Animal 类中的成员变量)
  对于成员方法:编译看左边,执行也看右边 (以左边的类为准,去编译如果没有方法会报错,但是执行的时候是调用的左边的的方法,因为方法
  被重写 即执行Cat类中的Eat()方法)
三.多态的好处和弊端
   好处:定义方法的时候用父类作为参数,将来做操作时传具体的子类,然后使用子类的相关操作(变量和方法,子父类都拥有的)
   坏处:不能使用子类特有的功能(子类的有功能,父类没有实现的)
四.怎么在多态的情况下,使用子类独有的功能呢?
   向上转型 :Animal a = new Cat();   左边是父类,右边是子类,这是向上转型
   向下转型: Cat cc = (Cat)a; a 之前是Animal类,现在强转成Cat类,现在就可以使用Cat类的独有方法
            (能向下转型的根本原因是:a 在栈内里指向一个堆内存空间地址,而这个空间地址实际就是Cat对象,所以cc直接引用了堆内存空间)
五.抽象类
   1.没有方法体的方法应该定义为抽象方法,类中如果有抽象方法,那么该类一定是抽象类。
   2.抽象方法和抽象方法必须由 abstract 来修饰
   3.抽象类里可以没有抽象方法(没有意义),但是有抽象方法必然是抽象类。
   4.抽象类不能直接实像化对象,参照多态的方式,通过子类对象实例化,叫抽象化多态
   5.抽象类的子类要么重写抽象类中所有的抽象方法,public class Zi extends Fu(){重写所有Fu类中的抽象方法}
     要么本身是抽象类 public abstract class Zi extends Fu(){ 不用重写Fu类中的抽象方法}
   6.抽象类可能成员变量(变量,常量final),也可以有构造方法,但不能实例化,仅用于子类访问父类时初始化父类数据,
     可以有成员方法:
     抽象方法:限定子类必须完成某些动作(子类必须要重复写父类中的抽象方法 )
     非抽象方法:提高代码的复用性
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!