Java的抽象类和接口
来源:互联网 发布:tcp ip网络编程 代码 编辑:程序博客网 时间:2024/06/04 19:56
一、抽象类
在解决实际问题中,一般将父类定义为抽象类,需要使用父类进行集成和多态处理。继承树中越往上越抽象(如鸡是属于家禽,家禽是属于动物),在多态中,并不需要将父类初始化,我们需要的只是子类对象,所以在Java中设置抽象类不可以实例化对象
public abstract class Test{ abstract void testAvstract();//定义抽象方法}
二、接口
public interface drawTest{ void draw();//接口内的方法,省略abstract关键字}
1、接口是可以像类一样被权限修饰符修饰,但是public关键字仅限用于接口与其同名的文件中被定义
2、interface:定义接口的关键字
3、drawTest:接口的名称
在接口的定义的方法中必须定义为public或者abstract形式,其他修饰符是不被Java编译器认可的,即使不将该方法声明为public的形式,也是public
在接口中 定义的任何字段都自动是static和final的
例1:多态和接口相结合
interface drawTest{ public void draw();}class ParallelogramgleUseInterface extends QuadrangleUseInterface implements drawTest{ public void draw(){//该类实现了接口,所以要覆盖draw()的方法 System.out.println("绘制平行四边形"); }}class SquareUseInterface extends QuadrangleUseInterface implements drawTest{ public void draw(){ System.out.println("绘制正方形"); }}public class QuadrangleUseInterface{//定义四边形类 public static void main(String[] args){ drawTest[] d = {//接口向上转型操作 new SquareUseInterface(),new ParallelogramgleUseInterface() }; for(int i = 0; i < d.length; i++){ d[i].draw();//调用draw方法 } }}
结果如下:
例2:接口和继承结合
interface intf{}interface intf1 extends intf{}
在Java中是不允许多重继承的,但是使用接口就可以实现多重继承,因为一个类是可以实现很多接口的,多重继承的语法如下:
class 类名 implements interface1,interface2,interface3,...interfacen;
三、类的继承,多态和接口的区别
类的继承:可以继承父类原有的属性和方法,也可以增加父类所不具备的方法
接口:接口中所有的方法都是没有方法体的,只有方法的特征,没有方法的实现,因为在不同的类中实现的方法是不一样的。
多态:可以对所有类进行通用的处理,多态即多种状态,接口的多种不同实现方式就是多态
一个类只能继承一个父类,但是却能实现很多的接口。
四、覆盖和重载的区别
覆盖 (override):也叫重写,就是在当父类中的某些方法不能满足要求时,子类中改写父类的方法。当父类中的方法被覆盖了后,除非用super关键字,否则就无法再调用父类中的方法了。被覆盖的方法不能是final类型的。因为final修饰的方法是无法覆盖的。而且被覆盖的方法不能为private。否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。并且被覆盖的方法不能为static。所以如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误。反之亦然。即使父类和子类中的方法都是静态的,并且满足覆盖条件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。
方法的覆盖和重载具有以下相同点:
都要求方法同名
都可以用于抽象方法和非抽象方法之间
方法的覆盖和重载具有以下不同点:
方法覆盖要求返回类型必须一致,方法重载对此没有要求。
方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类中的所有方法(包括从父类中继承而来的方法)
父类的一个方法只能被子类覆盖一次,而一个方法可以在所有的类中可以被重载多次。
对于属性(成员变量)而言,是不能重载的,只能覆盖。
- Java抽象类和接口的区别
- Java抽象类和接口的区别
- java抽象类和接口的区别
- Java 抽象类和接口的区别
- java接口和抽象类的区别
- java接口和抽象类的区别
- JAVA 抽象类和接口的区别
- Java的抽象类和接口
- Java抽象类和接口的区别
- java接口和抽象类的区别
- java抽象类和接口的区别
- java接口和抽象类的区别
- java接口和抽象类的区别
- Java抽象类和接口的区别
- Java抽象类和接口的区别
- Java抽象类和接口的区别
- Java抽象类和接口的区别
- Java抽象类和接口的区别
- 国际C语言混乱代码大赛所有得奖源码 1984----研究分析
- 通知
- 职场中各职位英文缩写
- VolleyLog-学习Google封装的Log
- UVA 11437 || Triangle Fun
- Java的抽象类和接口
- 用Powershell对文件批量重命名
- web页面树形下拉选择框
- [LeetCode] Intersection of Two Linked Lists
- 线段树模板
- split的简单使用
- 九度OJ题目1202:排序
- 《数据可视化实战:使用D3设计交互式图表 》笔记
- try catch 异常处理