一:抽象类
public abstract class Person {
public abstract void eat();
public abstract void sleep();
public void playGame(){
System.out.println("打游戏");
}
}
public class Teacher extends Person {
@Override
public void eat() {
System.out.println("老师爱喝粥");
}
@Override
public void sleep() {
System.out.println("老师爱早睡");
}
}
public class Student extends Person {
@Override
public void eat() {
System.out.println("学生爱吃火锅");
}
@Override
public void sleep() {
System.out.println("学生爱晚睡");
}
}
public class Test {
public static void main(String[] args) {
Person p=new Teacher();
p.eat();
p.sleep();
p.playGame();
p=new Student();
p.eat();
p.sleep();
p.playGame();
}
}
运行结果:
老师爱喝粥
老师爱早睡
打游戏
学生爱吃火锅
学生爱晚睡
打游戏
Process finished with exit code 0
注释:抽象类中既可以有抽象的方法,也可以有非抽象方法;抽象类的子类要么也是抽象类,要么重写父类中的所有抽象方法。
二:接口
接口用interface表示,表类与接口的实现关系用implement
public abstract class Person {
public abstract void eat();
public abstract void sleep();
}
public class Teacher extends Person implements MyInterface{
@Override
public void eat() {
System.out.println("老师爱喝粥");
}
@Override
public void sleep() {
System.out.println("老师爱早睡");
}
@Override
public void speakEnglish() {
System.out.println("老师会说英语");
}
}
public class Student extends Person {
@Override
public void eat() {
System.out.println("学生爱吃火锅");
}
@Override
public void sleep() {
System.out.println("学生爱睡懒觉");
}
}
public interface MyInterface {
public abstract void speakEnglish();
}
public class Test {
public static void main(String[] args) {
Teacher teacher=new Teacher();
Person p=teacher;
p.eat();
p.sleep();
MyInterface myInterface=teacher;
myInterface.speakEnglish();
p=new Student();
p.eat();
p.sleep();
}
}
运行结果:
老师爱喝粥
老师爱早睡
老师会说英语
学生爱吃火锅
学生爱睡懒觉
Process finished with exit code 0
注释:接口中只能有抽象方法
三:接口和抽象类的区别
A:成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
B:关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承
C:设计理念区别
抽象类 被继承体现的是:”is a”的关系。 抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系
四.类与类,类与接口,接口与接口的关系
a:类与类:
继承关系,只能单继承,可以多层继承。
b:类与接口:
实现关系,可以单实现,也可以多实现。
并且还可以在继承一个类的同时实现多个接口。
c:接口与接口:
继承关系,可以单继承,也可以多继承。
五.内部类