多态、抽象类、接口

2016/10/27 Java Object-Oriented

多态

前提和体现

  • 有继承关系
  • 有方法重写
  • 有父类引用指向子类对象

成员访问特点

  • 成员变量
    • 编译看左边,运行看左边
  • 成员方法
    • 编译看左边,运行看右边(由于成员方法存在方法重写,所以它运行看右边)
  • 静态方法
    • 编译看左边,运行看左边
    • 所以静态方法不能算方法的重写
  • 构造方法
    • 子类的构造都会默认访问父类构造
class A
{
    public void show()
    {
        show2();
    }

    public void show2()
    {
        System.out.println("我");
    }
}
class B extends A
{
    public void show2()
    {
        System.out.println("爱");
    }
}
class C extends B
{
    public void show()
    {
        super.show();
    }

    public void show2()
    {
        System.out.println("你");
    }
}
public class Polymorphisn
{
    public static void main(String[] args)
    {
        A a = new B();
        a.show();//调用父类show后调用子类show2

        B b = new C();
        b.show();//调用父类show后调用子类show2
        //爱
        //你
    }
}
class A{
    protected int age = 20;

    protected void showAge(){
        System.out.println(age);
    }
}

class B extends A{
    protected int age = 10;
}

public class Polymorphisn
{
    public static void main(String[] args)
    {
        B b = new B();
        b.showAge();//20

        A a = new B();
        a.showAge();//20

        System.out.println(b.age);//10
        System.out.println(a.age);//20
    }
}

好处

  • 提高了程序的维护性(由继承保证)
  • 提高了程序的扩展性(由多态保证)

弊端

  • 不能访问子类特有功能
    • 需要向下转型

抽象类

抽象类的特点

  • 抽象类和抽象方法必须用关键字abstract修饰
  • 抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
    • 一个抽象类如果没有抽象方法作用是防止被实例化
  • 抽象类不能实例化
    • 构造方法用于子类访问父类数据的初始化
  • 抽象类的子类
    • 是一个抽象类。
    • 是一个具体类。这个类必须重写抽象类中的所有抽象方法。

抽象类中的方法

  • 抽象类的抽象方法:用于限定子类必须完成某些动作
  • 抽象类的非抽象方法:用于提高代码的复用性

abstract不能和哪些关键字共存

final、static、private

接口

接口的实现类

  • 是一个抽象类。
  • 是一个具体类,这个类必须重写接口中的所有抽象方法。

接口的成员特点

  • 成员变量
    • 只能是常量
    • 默认修饰符:public static final
  • 构造方法
    • 没有构造方法
  • 成员方法
    • 只能是抽象的
    • 默认修饰符:public abstract

抽象类和接口的区别

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

以上概念总结于传智播客Java基础课程

Search

    Post Directory