Java多态 抽象 接口

来源:互联网 发布:httpclient java 编辑:程序博客网 时间:2024/06/05 20:41

多态的概述及其代码体现

  • A:多态概述
    • 事物存在多种形态
  • B:多态前提
    • a:要有继承关系
    • b:要有方法重写
    • c:父类引用指向子类对象
  • C:案例演示

    class Demo {    public static void main(String[] args) {        Cat cat = new Cat();        cat.eat();        Animal ani = new Cat();//父类引用 指向 子类对象        ani.eat();    }}class Animal {    public void eat(){        System.out.println("动物吃饭");    }}class Cat extends Animal {  //有继承关系    public void eat(){   //重写父类方法        System.out.println("猫吃鱼");    }}

多态中成员的访问特点

  • 成员变量
    • 编译看左边(父类)运行看左边(父类)
  • 成员方法
    • 编译看左边(父类)运行看右边(子类),也叫动态绑定
  • 静态方法
    • 编译看左边(父类)运行看左边(父类)

多态的好处和弊端

  • 多态好处
    • 提高了代码的维护性(继承保证)
    • 提高了代码的扩展性(由多态保证)
  • 多态的弊端
    • 不能使用子类的特有属性和方法
  • 什么时候用多态呢
    • 父类引用作为参数的时候

多态题目分析

  • A:抽象类概述
    • 就是看不懂的
  • B:抽象类特点
    • 抽象类和抽象方法必须用abstract来修饰
      • 抽象类
        • abstract class 类名{}
      • 抽象方法
        • public abstract void 方法名();
      • 抽象类不一定有抽象方法 但有抽象方法的类一定是抽象类
      • 抽象类不能实例化 那么抽象类如何实例化呢
        • 按照多态的方式,由具体的子类实例化 其实这也是一种多态 抽象类多态
      • 抽象类的子类
        • 要么是抽象类
        • 要么是重写抽象类中的所有抽象方法
  • C:案例演示

抽象类的概述及其特点

  • A:抽象类的成员特点
    • a:成员变量
      • 既可以是变量 也可以是常量
      • abstract不可以修改成员变量 (可以修饰类和方法)
    • b:构造方法
      • 用于子类访问父类数据的初始化
    • c:成员方法
      • 既可以是抽象的 也可以是非抽象的
  • B:案例演示
    • 抽象类的成员特点
  • C:抽象类的成员方法特性
    • a:抽象方法 强制要求子类做的事情
    • b:非抽象方法 子类继承的事情 可以提高代码复用性

抽象类练习猫狗案例

  • A:案例演示
    • 具体事物:猫 狗
    • 共性:姓名 年龄 吃饭
    • 猫特性:抓老鼠
    • 狗特性:看家

接口的概述及其特点

  • A:接口概述
    • 从狭义角度讲就是指java中的interface
    • 从广义角度讲对外提供规则的都是接口
  • B:接口特点
    • a:接口用关键字interface表示
      • interface 接口名{}
    • b:类实现接口用 implements表示
      • class 类名 implements 接口名{}
    • c:接口不能实例化
      • 接口如何实例化呢
        • 按照多态的方式来实例化
    • d:接口的子类
      • a:可以是抽象类 但意义不大
      • b:可以是具体类 要重写接口中的所有抽象方法
  • C:案例演示

接口的成员特点

  • 成员变量
    • 只能是常量 并且是静态并公共的
    • 默认修饰符 public static final
    • 建议手动给出
  • 构造方法
    • 接口没有构造方法
  • 成员方法
    • 只能是抽象方法
    • 默认修饰符 public abstract
    • 建议 自己手动给出

类与类 接口与接口 类与接口的关系

  • 类与类
    • 继承关系,只能单继承 可以多层继承
  • 接口与接口
    • 继承关系 可以单继承 也可以多继承
  • 类与接口
    • 实现关系 可以单实现 也可以多实现
    • 并且还可以在继承一个类的同时实现多个接口

抽象类和接口的区别

  • A:成员区别
    • 抽象类
      • 成员变量
        • 可以是变量也可以常量
      • 构造方法
        • 有构造方法
      • 成员方法
        • 可以抽象 也可以非抽象
    • 接口
      • 成员变量:只可以是常量
      • 成员方法:只可以抽象
      • 构造方法:没有构造方法
  • B:关系区别
    • 类与类
      • 继承 ,单继承 多层继承
    • 类与接口
      • 单实现 多实现
    • 接口与接口
      • 继承 单继承 多继承
  • C:设计理念区别
    • 抽象类
      • 被继承体现是“is a”的关系 抽象类中定义的是该继承体系的共性功能
    • 接口
      • 被实现的体现是“like a ”的关系 接口中定义的是该继承体系的扩展功能

猫狗案例加入跳高功能 分析及其代码实现

  • 案例演示
    • 物类:姓名,年龄 ,吃饭 ,睡觉
      • 吃饭和睡觉共性功能 可以抽象出来
    • 猫狗
    • 动物培训接口:跳高

class Test {
public static void main(String[] args) {
Cat c = new Cat(“黑”,8);
c.eat();
c.sleep();

        JumpCat jc = new JumpCat("跳高猫",23);        jc.eat();        jc.sleep();        jc.jump();    }}/*    案例演示    物类:姓名,年龄 ,吃饭 ,睡觉         吃饭和睡觉共性功能  可以抽象出来    猫狗    动物培训接口:跳高*/abstract class Animal {    private String name;                    //姓名    private int age;                        //年龄    public Animal(){}    public Animal(String name ,int age){        this.name = name;        this.age = age;    }    public void setName(String name){        this.name = name;    }    public String getName(){        return name;    }    public void setAge(int age){        this.age = age;    }    public int getAge(){        return age;    }    public abstract void eat();     //吃饭    public abstract void sleep();   //睡觉 }interface Jumping {         //跳高的接口    public void jump();}class Cat extends Animal {    public Cat(){}    public Cat(String name ,int age){        super(name,age);    }    public void eat(){        System.out.println("猫吃鱼");    }    public void sleep(){        System.out.println("侧着睡");    }}class JumpCat extends Cat implements Jumping {    public JumpCat(){}    public JumpCat(String name ,int age){        super(name,age);    }    public void jump(){        System.out.println("猫跳高");    }}class Dog extends Animal {    public Dog(){}    public Dog(String name ,int age){        super(name,age);    }    public void eat(){        System.out.println("狗吃鱼");    }    public void sleep(){        System.out.println("侧着睡");    }}class JumpDog extends Dog implements Jumping {    public JumpDog(String name ,int age){        super(name,age);    }    public void jump(){        System.out.println("狗跳高");    }}
0 0
原创粉丝点击