简单地总结一下接口和抽象类:
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 "喝水喝水";
}
}