Java基础——抽象类&接口
来源:互联网 发布:国家电网待遇知乎 编辑:程序博客网 时间:2024/05/12 16:45
抽象类:
在实际设计中,有这样的需要,就是某个基类不允许创建对象。我们可以在定义该类时,在前面加上 abstract关键字,该类不能被实例化,如果要创建抽象类的对象,编译器会报错。抽象类也有构造方法,该构造方法在子类创建对象时被调用。在定义方法时,如果在前面加上abstract关键字,这时该方法没有方法体,该方法体在子类中实现。例如:public abstract void m1();abstract 方法只能出现在abstract类中,子类继承父类时,除非子类也是abstract类,否则必须实现父类继承来的abstract方法。抽象类体中,可以包含抽象方法,也可以不包含抽象方法。但类体中包含抽象方法的类必须要声明为抽象类。一个非抽象的类继承抽象类,必须将抽象类中的抽象方法覆盖,实现,重写。抽象类不能被final修饰抽象方法不能被final修饰
interface 比抽象类更进一步,在interface中所有的方法均不能有方法体。interface 非常有用,因为在Java中类不允许多重继承,但是某个类可以实现多个interface,接口和接口之间可以多继承。抽象的类中,并非所有的方法都是抽象的,那些抽象的方法在子类中实现。interface 则是完全抽象的,所有的方法都是抽象的,不能有方法体。接口中没有构造方法,无法被实例化。接口中的方法如果没有存取控制符修饰的话,就是public,接口中的存取控制均为public,不能是其他的权限。接口中也可以有域,但是这些域暗含着是 static和 final,在接口中要给域初始化。接口中只能出现:常量、抽象方法以interface取代class关键字就是定义接口的形式。interface 前也可以有public,要求文件名也必须和接口名一致。一个类可以实现多个接口。(这里的“实现”可以等同看做“继承”)一个非抽象的类实现接口,需要将接口中所有的方法“实现/重写/覆盖”。如果某个类要实现接口,要使用关键字 implements后跟若干接口名,接口名之间用逗号分隔。因为接口中的方法如果没有存取控制符修饰的话,就是public,所以在实现接口的类中,应在方法前加上存取控制符public。如下例:interfaceA{
inti=0;
void m();
}
classB implements A{
//inti=9;
public void m(){}
public static void main(String s[]){
B x=new B();
System.out.println(x.i);
}
}
interface CanFight {
voidfight();
}
interface CanSwim {
voidswim();
}
interface CanFly {
voidfly();
}
class ActionCharacter {
publicvoid fight() {}
}
class Hero extends ActionCharacter
implements CanFight,CanSwim, CanFly {
publicvoid swim() {}
publicvoid fly() {}
}
public class Adventure {
publicstatic void t(CanFight x) {x.fight(); }
publicstatic void u(CanSwim x) {x.swim(); }
publicstatic void v(CanFly x) {x.fly(); }
publicstatic void w(ActionCharacter x) {x.fight(); }
publicstatic void main(String[] args) {
Heroh = new Hero();
t(h);// Treat it as a CanFight
u(h);// Treat it as a CanSwim
v(h);// Treat it as a CanFly
w(h);// Treat it as an ActionCharacter
}}
注意在interface CanFight和类ActionCharacter中fight( )一样,所以在Hero中没有提供定义。如果要创建某个新类型的对象,那么该类型中所有的方法都应该有实现。即使如上例中的fight,在ActionCharacter有实现,所以在Hero中就无需实现了。
相同点:
都包含抽象方法;都不能被实例化;都是引用数据类型。可以声明抽象类及接口变量,并将子类的对象赋给抽象类变量,或将实现接口的类的变量赋给接口变量。不同点:
只能继承一个抽象类,但可以实现多个接口,接口可以多继承;抽象类的访问权限控制同普通类,接口的访问权限只有public即是默认权限,所以public可以省略;接口中只能声明常量,不能声明变量;接口中只能声明抽象方法。
1.可以使项目分层,所有层都面向接口开发,开发效率提高了。2.接口使代码和代码之间的耦合度降低,就像内存条和主板的关系,变得“可插拔”。可以随意切换。3.接口和抽象类都能完成某个功能,优先选择接口。
- Java基础——抽象类&接口
- Java基础——Java的抽象机制,抽象方法抽象类和接口
- JAVA基础 —— 继承、抽象、接口
- Java基础——类、接口、抽象类、对象
- java基础——抽象类和接口
- Java基础——抽象类与接口
- Java基础——抽象类和接口的关系
- java基础学习——内部类、抽象类、接口
- Java基础——继承接口抽象类
- Java基础(六)——接口和抽象类
- java基础学习总结——接口和抽象类
- Java基础——接口的继承与抽象类
- Java基础——接口与抽象类
- 【Java基础】——接口和抽象类
- Java基础—— 抽象类和接口
- 黑马程序员—JAVA基础之继承、抽象类、接口
- java基础—抽象类和接口的区别
- java基础—接口与抽象类的区别
- 蓝月手游iOS客户端技术支持
- Upgrade Solaris X64 with Oracle Support
- 弹框遮罩层
- 小杂论
- ConcurrentHashMap总结
- Java基础——抽象类&接口
- 自定义-提示框
- (16)session应用:我的购物车
- SEO难做与否全看竞争对手!如何甩开对手几条街?
- eclipse中报错:Errors running builder “Integrated External Tool Builder” on project
- SpringMVC整合WebSocket
- 好未来:倒置字符串
- 大端小端以及判别方式
- hdu 3351 Seinfeld(栈操作)