抽象类:

1、abstract关键字修饰的类叫抽象类,用abstract关键字修饰的方法叫抽象方法;

2、含有抽象方法的类必须被声明为抽象类,但抽象类中可以有非抽象方法;

3、继承了抽象类的类中,抽象方法必须被重写。否则,该类就成了抽象类了;

4、抽象类不能被实例化;

5、抽象方法只需声明,不需实现。

示例代码如下:

 

  1. abstract class Animal {  
  2.     private String name;  
  3.     Animal(String name) {  
  4.         this.name = name;  
  5.     }  
  6.     public abstract void enjoy(); //抽象方法,无需实现  
  7. }  
  8. class Cat extends Animal {  
  9.     private String eyesColor;  
  10.     Cat(String n, String c) {  
  11.         super(n);  
  12.         eyesColor = c;  
  13.     }  
  14.     public void enjoy() {          //对父类抽象方法的实现  
  15.         System.out.print("猫叫声...");   
  16.     }  

接口:

1、接口可以多重实现(一个类可以实现多个接口,可以实现多继承了);

2、接口中声明的成员变量默认为public static final;也只能是public static final;

3、接口中的所有方法都是抽象方法,而且这些方法默认为public,也只能是public;

4、实现某一接口的类中,必须重写该接口中的所有方法。否则,它就是一个抽象类;

5、与继承关系类似,接口与实现类之间存在多态性。
6、public static final int id=1;注意成员变量在声明时要赋予初值。因为接口就是提供一种统一的’协议’,而接口中的属性也属于’协议’中的成员。它们是公共的,静态的,最终的常量。相当于全局常量。
 
 
  1. interface Singer {  
  2.     public static final int id=1;  //注意在声明的时候要给变量赋予初值
  3.     public void sing();  
  4.     public void sleep();  
  5. }  
  6. interface Painter{  
  7.     public void paint();  
  8.     public void eat();  
  9. }  
  10. class Student implements Singer{  
  11.     private String name;  
  12.     public void sing(){  
  13.         System.out.println("Student sing");  
  14.     }  
  15.     public void sleep(){  
  16.         System.out.println("Student sleep");  
  17.     }  
  18. }  
  19. class Teacher implements Singer,Painter {  
  20.     private String name;  
  21.     public void sing(){  
  22.         System.out.println("Teacher sing");  
  23.     }  
  24.     public void sleep(){  
  25.         System.out.println("Teacher sleep");  
  26.     }  
  27.     public void paint(){  
  28.         System.out.println("Teacher paint");  
  29.     }  
  30.     public void eat(){  
  31.         System.out.println("Teacher eat");  
  32.     }  
  33. }  
  34. public class Test {  
  35.     public static void main(String args[]) {  
  36.  
  37.         Singer s1=new Student();  //接口的引用指向实现接口的类的对象,等同于父类的引用指向子类的对象。S1只能访问Student类中实现Singer接口中的方法,而不能访问Student类中的其它方法。  
  38.         s1.sing();s1.sleep();  
  39.         Singer s2=new Teacher();  
  40.         s2.sing();s2.sleep();  
  41.         Painter p=(Painter)s2;  //将Singer对象强制转换为Painter类型  
  42.         p.paint(); p.eat(); //转换后的对象只能访问Teacher类中实现Painter接口中的方法,而不能访问其它方法  
  43.     }  
  44. }  
  45. 输出结果:  
  46. Student sing  
  47. Student sleep  
  48. Teacher sing  
  49. Teacher sleep  
  50. Teacher paint  
  51. Teacher eat 
疑问: