一、abstract抽象类
1.关键字定义
通过abstract关键字定义抽象类
2.可使用的方法
- 允许有构造方法
- 允许定义抽象方法(用abstract修饰的方法,没有方法体)
- 允许有普通方法
3.继承
只能用extends继承一个class类
4.注意要点
- 抽象方法存在的类必须是抽象类,而抽象类中不一定定义抽象方法
- 抽象类的子类必须重写抽象类的抽象方法
- 如果抽象类的子类也是抽象类,可以不用重写父类的抽象方法
- 抽象类不能被实例化,但可以创建一个新对象,用它引用
//抽象类
public abstract class Person{
//抽象方法
public abstract void run1();
//构造方法
public Person(){}
//普通方法
public void jump(){}
//定义成员变量
public String bookname;
private int amount;
protected double price;
}
//抽象子类
abstract class Son extends Person{
//抽象方法
public abstract void run2();
}
//子类
class Child extends Son{
//重写父类Son的构造方法
//Son也是Person的子类,所以也要重写Person的构造方法
@Override
public void run2() {
// TODO Auto-generated method stub
}
@Override
public void run1() {
// TODO Auto-generated method stub
}
}
class Children extends Person{
//重写父类Person的构造方法
@Override
public void run1() {
// TODO Auto-generated method stub
}
}
class People{
public static void main(String[] args) {
//创建对象
Person a=new Children();
//调用方法
a.run1();
}
}
二、interface接口
1.关键字定义
接口由interface关键字定义
2.可使用的方法
- 允许定义抽象方法,可以省略abstract以及public
- 允许有默认方法,通过default关键字定义的方法
- 不允许有构造方法和普通方法
3.继承
- 通过implements实现interface接口,可以实现多个接口
- 接口之间允许extends继承多个接口
4.注意要点
- 不允许定义成员变量,只能定义常量
- 只能使用public访问修饰符
- 接口不允许实例化
public interface Person {
//抽象方法
public abstract void run();
abstract void jump();
void walk();
//默认方法
default void dosth() {}
//定义常量
public static final String name = "";
}
class Son implements Person{
//重写抽象方法
@Override
public void run() {
// TODO Auto-generated method stub
}
@Override
public void jump() {
// TODO Auto-generated method stub
}
@Override
public void walk() {
// TODO Auto-generated method stub
}
}
//定义三个接口a,b,c
interface a{}
interface b{}
interface c{}
//类可以实现多个接口
class Child implements a,b,c{}
//接口可以继承多个接口
interface Children extends a,b,c{}