• 抽象类,多态,类型转换


    1.抽象类

    当一个类的方法过于抽象,无法确定如何实现时,声明这个类后,方法体为空。这样的方法称为抽象方法,用abstract修饰。当一个类有抽象方法时,该类必须被声明为抽象类。

    public abstract class 类名{
    }

    1.1抽象类的特性

    (1)抽象类不能实例化

    (2)如果一个方法过于抽象无法被实现,需要将该方法声明为抽象方法,形式如下。

    public abstract void 方法名();

    (3)子类继承抽象类,子类继承到的抽象方法,一定要根据相应情况重写(override),除非该子类也是抽象类。

    1.2重写和实现

    方法重写(override):当子类继承父类的方法不能满足自身的需要时,子类重写父类的重名方法。

    实现(implement):当子类继承抽象类时,子类必须重写父类的抽象方法,子类对抽象父类的抽象方法的重写称之为实现,实现其实是一种特殊的方法重写。

    2.多态

     程序中的多态:同一引用类型,使用不同的实例而执行结果不同称为多态。

    同:同一个类型,一般指父类。

    不同:不同的子类实例/同一方法执行的结果的类型不同

    2.1实现多态的步骤

    【1】编写父类

    【2】编写子类,子类要重写/实现父类的方法

    【3】运行时,父类类型   引用  子类对象(Pet pet = new Dog())

    2.2 多态的实现形式

    【1】父类类型 引用 子类对象

    1 // 多态
    2 // 同一引用类型
    3 Pet pet = null;
    4 // 父类引用 引用 子类对象
    5 pet = new Dog("二狗",100,0,"土狗");
    6 // 呈现多态
    7 pet.eat();

    【2】父类作为方法的参数列表实现多态

    1 public void feed(Pet pet) {
    2         System.out.println(this.getName() + "正在喂" + pet.getName());
    3         pet.eat();
    4     }

    【3】父类作为返回值实现多态

     1     public Pet adoptPet(int type) {
     2         Pet pet = null;
     3         if(1 == type) {
     4             pet = new Dog();
     5         }else if(2 == type) {
     6             pet = new Penguin();
     7         }else if(3 == type){
     8             pet = new Cat();
     9         }
    10         return pet;
    11     }

    3 类型转换(引用数据类型)

    多态中,类型转换有两种,自动类型转换和强制类型转换

    1.自动类型转换,也称为向上类型转换。子类可以自动转换为父类

    Pet pet = null;
    pet = new Dog();

    2.强制类型转换,也称为向下类型转换。父类可以通过强制类型转换为子类

    子类类型 引用 = (子类)父类对象

    3.1 instanceof关键字

    obj instanceOf 类/接口 判断obj是否是类/接口的实例
    1 public class TestInstanceOf {
    2     public static void main(String[] args) {
    3         Dog dog = new Dog();
    4         System.out.println(dog instanceof Dog); //true
    5         System.out.println(dog instanceof Pet); //true
    6         System.out.println(dog instanceof Object); //true
    7     }
    8 }

    当父类要调用子类特有的方法时,一定要用强制类型转换,通过instanceof鉴别具体类型

    1 public void play(Pet pet) {
    2         if(pet instanceof Dog) {
    3             Dog dog = (Dog) pet;
    4             dog.catchFlyDisc();
    5         }else if(pet instanceof Penguin) {
    6             Penguin penguin = (Penguin) pet;
    7             penguin.swimming();
    8         }
    9     }
  • 相关阅读:
    关于垂直居中
    linux 前后台程序切换
    mac 下jetbrains IDE系列IDE主题
    mac 安装命令行开发者工具
    python 安装MySQLdb mysql_config not fount
    error: command 'cc' failed with exit status 1
    sqllite 入门
    jieba分词
    zookeeper 故障重连机制
    深入学习 celery
  • 原文地址:https://www.cnblogs.com/qq308015824/p/10759308.html
Copyright © 2020-2023  润新知