简单地总结一下接口和抽象类:
package com.pingan.toa.asset.facade.test; /** * * @author LIUFEIJING049 * 总结下来,抽象类和接口: * 1. 抽象类是对根源的抽象,接口是对动作的抽象 * 2. 抽象类里面的方法要么是抽象的,要么就是有方法体的,抽象的方法必须要加关键字abstract * 而接口的方法默认就是abstract的,不可以有方法体 * 3. 抽象类里的变量可以用static,可以用final去修饰,可以是private,可以是public,可以是protected * 接口里的变量默认是static final的 * 4. 继承抽象类的子类,是可以去访问父类的方法和属性的,并且可以对属性进行修改 * 子类是不可以修改父接口的属性的 * 5. 抽象类单继承,接口可以多实现 * 抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。 * 在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。 * 而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。 */ public class Test { public static void main(String[] args) { Animal a = new Cat(); //a.a = 5; System.out.println(a.talk() + a.a);//对于变量,是没有动态的,依然是父类的变量 a.eat(); //如果父类中有而子类没有,调用的是父类的;如果子类也有,那就是子类的 // Animal c = new Animal();抽象类不能被实例化 Matter human = new Cat(); //human.b = 90; 接口的基本数据类型默认是final的,所以是不能再被子类去访问的 System.out.println(human.drink() + Matter.b); Cat c = new Cat(); //c.b = 90; //接口默认static final,所以不能被修改了 c.a = 55; //子类是可以修改父类里面的变量值的 c.eat(); System.out.println(c.a); } } 抽象类: package com.pingan.toa.asset.facade.test; public abstract class Animal { abstract String talk(); //抽象类里面的方法要么是抽象的,要么就是又方法体的,抽象的方法必须要加关键字abstract int a = 4; //可以用static,可以用final去修饰,可以是private,可以是public,可以是protected public void eat() { System.out.println("Animal"); } } 接口: package com.pingan.toa.asset.facade.test; public interface Matter { String drink();//默认是abstract的 int b = 9; //默认是public static final的 } Cat继承抽象类和实现接口: package com.pingan.toa.asset.facade.test; public class Cat extends Animal implements Matter { //public int a = 90; Cat(int i) { } public Cat() { // TODO Auto-generated constructor stub } @Override String talk() { // TODO Auto-generated method stub return "Cat, miaomiao......"; } /*public void eat() { System.out.println("hh!"); }*/ @Override public String drink() { // TODO Auto-generated method stub return "喝水喝水"; } }