抽象类
人们把不想被实例化的类,通常定义为抽象类,其实抽象类理解起来也很容易,比如当你上周去了动物园,回来后有人问你去动物园都看见了什么,你可以回答狮子、老虎、大象...但是绝不能回答 ‘动物’ 一词,因为动物太抽象了,所以人们通常把动物设为抽象类,而狮子等具体动物就会设成一个类,它有自己的属性,有自己的方法(行为),狮子就是动物的子类,继承父类后,要重写它的抽象方法。
```java
public abstract class Animal1 {
String name;
String color;
public void eat() {
}
public abstract void run();
}
class Dog extends Animal1 {
@Override
public void run() {
// TODO Auto-generated method stub
}
public void seeDoor() {
}
}
class Test{
public static void main(String[] args) {
Animal1 an = new Dog(); //向上转型
an.run();//调用的是子类重写以后的方法
//注意:an只能访问Animal1里面的方法和属性,an.run() 优先调用子类重写的方法
//要想调用子类独有的属性和方法 需要向下转型
}```
总结:
1. 关键字abstract
2. 不能被实例化
3. 抽象类中可以包含属性,方法,构造方法,抽象方法
4. 抽象方法无方法体public abstract void eat();
5. 子类必须重写父类的抽象方法
6. 抽象方法必须在抽象类中
接口
1. 关键字interface
2. 不能被实例化
3. 接口中包含抽象方法 抽象方法的三种写法:
1) public abstract void eat();
2) public void eat();
3) void eat();
4. 接口中的包含共有的静态常量(常量名要大写,如果由多个单词组成之间加下划线) public static final double PI = 3.14; 也可将public static final省略 double PI = 3.14
5. 在jdk1.8之后 接口中可以有默认方法和静态方法 public default void eat(){ } public static void eat(){ }
6. 函数型接口 @FunctionalInterface 接口里面有且只有一个抽象方法