抽象类和接口
抽象类与抽象方法
public abstract class Graphics {
public abstract double getLength();
public abstract double getArea();
}
-
抽象类可以看做一种特殊的类,抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。,也可以有普通的方法
- 抽象方法是抽象类强制希望子类做的事情
- 非抽象方法是子类继承的事情,提高代码复用性
-
普通的类继承抽象类的时候,要求必须要去实现抽象类里面的所有的抽象方法。
public class Rect extends Graphics { private double width; private double height; @Override public double getLength() { return (width+height)*2; } @Override public double getArea() { return width*height; } }
子类是抽象类的时候,可以去实现抽象类的抽象方法,也可以不去实现
-
抽象类有构造函数吗?
- 抽象类有构造函数。抽象父类的构造函数是为了给子类访问父类的构造方法并给继承来的属性赋值
抽象类是不能实例化的
abstract不能和final一起用
abstract:抽象方法 目的让子类实现
final类不能被继承abstract不能和private一起用
abstract:抽象方法 目的让子类实现
private不能不能继承给子类abstract和static 不能一起使用
abstract抽象的没有方法体
static静态的 可以类名.访问-
子抽象类继承父抽象类,必须显性调用父抽象类的显性构造器
abstract class Animal{ private int age; public Animal(int age){ this.age = age; System.out.println("初始化Animal"); } public void move(){ System.out.println("跑步数:"+this.age); } } abstract class Dog extends Animal{ public Dog(int age){ super(age);//去掉会报异常 System.out.println("初始化Dog"); } } public class BigDog extends Dog{ public BigDog(){ super(10); System.out.println("初始化BigDog"); } public static void main(String[] args){ BigDog a = new BigDog(); a.move(); } }
接口
接口是一种规范 用来规范编程的。
-
用关键字interface表示
- interface 接口名 {}
-
类实现接口用implements表示
- class 类名 implements 接口名 {}
接口不能实例化
-
接口的子类
- 可以是抽象类。但是意义不大。
- 可以是具体类。要重写接口中的所有抽象方法。
成员
成员变量
接口的变量默认被public static final修饰(没有写都自动加上)
public int i = 10;
public final int i1 = 10;
public static final int i2 = 10;
- 接口中的属性访问:接口名.属性名
构造方法
接口中没有构造方法
- 没有变量属性,所以没有构造方法
- 子类继承的无参构造来自Object()
成员方法
接口中的方法默认被public abstract修饰,只能是抽象方法
JDK1.8之后允许有default方法和static方法
default void mothed() {
}
//default通过子类访问,如果父接口有多个且都重写了方法,就近原则
//static直接通过接口名.方法名访问
static void mothed1(){
}
类与抽象类与接口
- 类与类:
继承关系,只能单继承,可以多层继承。 - 类与接口:
实现关系,可以单实现,也可以多实现。
并且还可以在继承一个类的同时实现多个接口。 - 接口与接口:
继承关系,可以单继承,也可以多继承。
抽象类和接口的区别
-
成员区别
-
抽象类:
- 成员变量:可以变量,也可以常量
- 构造方法:有
- 成员方法:可以抽象,也可以非抽象
-
接口:
- 成员变量:只可以常量
- 成员方法:只可以抽象
-
-
关系区别
- 类与类
- 继承,单继承
- 类与接口
- 实现,单实现,多实现
- 接口与接口
- 继承,单继承,多继承
- 类与类
-
设计理念区别
- 抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
- 接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。