抽象类:
1、用abstract关键字修饰的类叫抽象类,用abstract关键字修饰的方法叫抽象方法;
2、含有抽象方法的类必须被声明为抽象类,但抽象类中可以有非抽象方法;
3、继承了抽象类的类中,抽象方法必须被重写。否则,该类就成了抽象类了;
4、抽象类不能被实例化;
5、抽象方法只需声明,不需实现。
示例代码如下:
- abstract class Animal {
- private String name;
- Animal(String name) {
- this.name = name;
- }
- public abstract void enjoy(); //抽象方法,无需实现
- }
- class Cat extends Animal {
- private String eyesColor;
- Cat(String n, String c) {
- super(n);
- eyesColor = c;
- }
- public void enjoy() { //对父类抽象方法的实现
- System.out.print("猫叫声...");
- }
- }
接口:
1、接口可以多重实现(一个类可以实现多个接口,可以实现多继承了);
2、接口中声明的成员变量默认为public static final;也只能是public static final;
3、接口中的所有方法都是抽象方法,而且这些方法默认为public,也只能是public;
4、实现某一接口的类中,必须重写该接口中的所有方法。否则,它就是一个抽象类;
- interface Singer {
- public static final int id=1; //注意在声明的时候要给变量赋予初值
- public void sing();
- public void sleep();
- }
- interface Painter{
- public void paint();
- public void eat();
- }
- class Student implements Singer{
- private String name;
- public void sing(){
- System.out.println("Student sing");
- }
- public void sleep(){
- System.out.println("Student sleep");
- }
- }
- class Teacher implements Singer,Painter {
- private String name;
- public void sing(){
- System.out.println("Teacher sing");
- }
- public void sleep(){
- System.out.println("Teacher sleep");
- }
- public void paint(){
- System.out.println("Teacher paint");
- }
- public void eat(){
- System.out.println("Teacher eat");
- }
- }
- public class Test {
- public static void main(String args[]) {
- Singer s1=new Student(); //接口的引用指向实现接口的类的对象,等同于父类的引用指向子类的对象。S1只能访问Student类中实现Singer接口中的方法,而不能访问Student类中的其它方法。
- s1.sing();s1.sleep();
- Singer s2=new Teacher();
- s2.sing();s2.sleep();
- Painter p=(Painter)s2; //将Singer对象强制转换为Painter类型
- p.paint(); p.eat(); //转换后的对象只能访问Teacher类中实现Painter接口中的方法,而不能访问其它方法
- }
- }
- 输出结果:
- Student sing
- Student sleep
- Teacher sing
- Teacher sleep
- Teacher paint
- Teacher eat