第二天 多态,抽象和接口

Keep on going never give up !!!

多态

含义:

  • 概念:对象在不同时刻表现出的不同状态
  • 代码:代码上来看:一个父类引用/父接口引用指向一个子类对象,Fu fu = new Zi();

多态的成员特点(变量和方法,编译运行)

  • 成员变量:编译看左边,运行看左边。
  • 成员方法:编译看左边,运行看右边。
  • 记忆:只有运行时用子类的方法,其他的编译运行都看父类。(当然,子类没有定义方法,还是运行父类的方法)
    在这里插入图片描述
    在这里插入图片描述

好处

  • 提高了代码的扩展性,复用性和可维护性

使用场景

  • 方法的形参用父类的引用来接收子类类型的实参。

弊端

  • 不能使用子类特有的方法。(因为编译不能通过)

转型

  • 向上转型
    Fu f = new Zi();//父类的引用指向子类的对象
    
  • 向下转型(强转)
    Zi zi1 = (Zi)f;
    

抽象类

概念

  • 如果一个类中的方法不确定做什么事情,那么我们就把方法体(包括{})干掉。然后这个方法就必须被abstract修饰,然后这个类就也必须被abstract修饰。被修饰的类称为抽象类,被修饰的方法称为抽象方法。

成员内容的特点(变量,方法和构造方法)

  • 成员变量:可以有变量,也可以有常量(和正常类一样)
  • 成员方法:
    – 抽象方法:强制子类从写(规范子类的行为)
    – 非抽象方法:让子类继承,提高代码的复用性。
  • 构造方法:有构造方法,但是不能通过构造方法实例化对象,构造方法的作用就是初始化数据,让子类通过super()使用.

接口

概念

  • 接口就是一个规范(标准)。

成员内容的特点(全部是静态的常量和抽象的方法)

  • 成员变量:全部是静态常量(默认有public static final 修饰)
  • 成员方法:只能有抽象方法(默认有public abstract修饰)

类,抽象类和接口的关系(类和类继承,类和接口实现,接口和接口继承)

  • 事物与生俱来的属性和行为定义在类里边,如果不确定做什么事情就将方法定义成抽象的。举例:比如人会说话,但是会的语言不确定,可以把说话的方式定义为抽象方法。随着人的年龄的增长,会学习跳舞、编程、画画。这些东西都是后天培养的,不是天生的,所以应该定义到接口里面。比如定义个接口,接口中有个飞的功能,让人实现这个接口,这就是超人。
  • 类和接口之间是实现的关系
  • 类和接口之间是实现关系,一个类可以实现多个接口。一个普通类实现了接口以后必须全部重写接口里的所有抽象方法,抽象类实现接口可以重写也可以不重写抽象方法。
  • 接口和接口之间是继承关系,并且可以多继承。

课堂代码

  • Person 类
    public abstract class Person {
        private String name;
        private int age;
    
        public Person() {
        }
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public abstract void eat();
    }
    
  • Learn 接口
    
    public interface Learn {
        void learn();
    }
    
  • 运动员类
    public abstract class Sportsman extends Person{
        public abstract  void sport();
    
        public Sportsman() {
        }
    
        public Sportsman(String name, int age) {
            super(name, age);
        }
    }
    
  • 教练类
    public abstract class Coach extends Person{
        public abstract void teach();
    
        public Coach() {
        }
    
        public Coach(String name, int age) {
            super(name, age);
        }
    }
    
  • 乒乓球运动员类
    public class PingpoPlayer extends Sportsman implements Learn{
        public PingpoPlayer() {
        }
    
        public PingpoPlayer(String name, int age) {
            super(name, age);
        }
    
        @Override
        public void learn() {
            System.out.println("learn english");
    
        }
    
        @Override
        public void sport() {
            System.out.println("play pingpo");
    
        }
    
        @Override
        public void eat() {
            System.out.println(this.getName()+"在吃饭");
    
        }
    }
    
  • 乒乓球教练类
    public class PingpoCoach extends Coach implements Learn {
        public PingpoCoach() {
        }
    
        public PingpoCoach(String name, int age) {
            super(name, age);
        }
    
        @Override
        public void teach() {
            System.out.println(this.getName()+"教乒乓球");
        }
    
        @Override
        public void learn() {
            System.out.println("教练学英语");
    
        }
    
        @Override
        public void eat() {
            System.out.println("play pingpo");
    
    
        }
    }
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值