面向对象4

Java基础-面向对象4

目标

  1. 理解多态的概念、作用以及使用方式
  2. 理解对象的类型转换父子之间
  3. 熟练掌握instanceof关键字
  4. 理解父类作为方法形参实现的多态
  5. 理解父类作为返回值实现的多态

多态

多种形态,即为多态,一个行为根据对象的不同,产生不同的操作

两种形式

  1. 使用夫类型作为方法的形参实现多态
  2. 使用父类型作为返回值实现多态

为什么使用多态

  1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。

    //继承

  2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性

    //多态的真正作用,

注意事项

  1. 多态是方法的多态,属性没有多态
  2. 父类和子类有联系,否则会出现类型转换异常
  3. 多态存在条件:1.存在继承关系 2. 方法需要重写 父类引用只想子类 Fahte f1=new Son();
  4. 无法重写的方法
    • static
    • final
    • private

小结

  1. Java中的多态存在于父子类之间
    • 必须存在继承关系
    • 必须包含方法覆盖
    • 父类变量指向子类对象
  2. 向上转型当使用多态的方式定义变量时,该变量:
    • 只能使用父类中定义的方法和属性*
    • 不能使用子类中新增的属性和方法*
  3. 向上转型多态方式定义的变量,在访问重名的变量时,会访问父类的变量。而不使用子类的变量
  4. 向上转型 多态方式定义的变量,在调用覆盖的方法时,会执行子类覆盖后的方法,而不执行父类的方法

以父类类型当作方法的返回值类型

package javalearning.kkb7oob5Test.DemoReturn;

/**
 * @author chenxu
 * @date 2020/10/28 - 0:01
 */
public class Master {
    public Father ppp(int a){
        if (a==2){
            return new Dog();
        }else if (a==0)
        {
            return new Cat();
        }
        else {
            return null;
        }
    }
    public static void main(String[] args) {
        Master master = new Master();
        Father xx = master.ppp(2);
        xx.play();
    }
}

向上转型

Pet p1=new Dog(); Pet是父类,而Dog是子类
  1. 父类与子类成员变量名相同时,输出成员变量时,调用父类的的成员变量
    2.只能调用父类子类拥有共同的属性和方法时,当子类重写后,调用的是子类重写后的方法

向下转型

  1. 目的:调用子类特有的属性 和方法。

  2. 向下转型前提必须先向上转型才能实现

    Pet p1=new Dog();
    Dog d1=(Dog)p1;
    
    

抽象类概述和语法

  1. 抽象类只能被继承不能被实例化
  2. 抽象类中可以声明普通和抽象方法
  3. 抽象方法
    • 抽象方法没有方法体:public abstract void eat();
    • 此方法在抽象类中无含义,重写有意义;
    • 抽象方法必须在子类中被重写,除非子类也是抽象类
  4. 如果一个类中定义了抽象方法,那么这个类必须修改成抽象类

接口

  1. 接口中只能包含常量和抽象方法,且必须在实现类中被重写

  2. 成员变量默认修饰符:public static final

  3. 接口中的抽象方法可以省略关键字abstract,所有方法默认为抽象方法

  4. 接口中不能声明变量 普通方法以及构造方法

    抽象类中可以存在构造方法,但是抽象类无法实例化,只有在被子类继承实例后才能调用父类的抽象方法

  5. 接口不能实例化,只能被类实现

  6. 接口至今啊是extends继承关系

接口与抽象类

  • 相同点
    1. 都可以定义抽象方法
    2. 都不能直接实例化来创建对象
    3. 继承抽象类的类以及实现接口的类都必须重写抽象方法,除非该类为抽象类
  • 不同点
    1. 抽象类可以定义构造方法、属性、普通方法,接口不行
    2. 接口与类之间是实现,抽象类与类之间是继承
    3. 一个类只能继承一个抽象类,但是可以继承多个接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值