[转载]Java抽象类和接口的学习

该博客主要围绕Java编程展开,介绍了抽象类abstract class和接口interface的相关内容,给出了具体的代码示例,如Child类继承Children抽象类并实现Lover接口,还阐述了抽象类和接口在实际场景中的应用,如AlarmDoor类继承Door抽象类并实现Alarm接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://android.blog.51cto.com/268543/385282/
抽象类 abstract class
    包含抽象方法的类,叫抽象类。而抽象的概念就是抽象出共同属性:成员变量和方法。所以抽象类可以有private等多种权限的成员变量和非abstract的成员方法。当然抽象方法是一定要有的
    抽象类是用于单一继承的,不能实例化。而继承类一定要实现抽象方法,因为抽象方法在抽象类里是没有实现行为的,访问权限只能是public。而非抽象方法则可以赋予方法的默认行为,访问权限可以多种,但需要考虑非抽象方法是否需要被继承类访问。
接口 interface
    接口,用于多重继承,也不能实例化只能包含static final的成员变量,不过在interface中一般不定义成员变量。而成员方法在接口里只能是抽象方法,访问权限只能是public
 
-----------------
所以,无论抽象类还是接口,抽象方法都需要在子类中实现,而且在子类中实现这些方法一个都不能少。而抽象类里面的非抽象方法,则在子类可以不重写实现里面的行为。参考以下例子:
  1. public class Child extends Children implements Lover{ 
  2.     public Child(String name) { 
  3.         super(name); 
  4.     } 
  5.  
  6.     public void printName() { 
  7.         System.out.println(super.getName()); 
  8.     } 
  9.  
  10.     public void love(String name) { 
  11.         System.out.println(name + ", I love you!"); 
  12.     } 
  13.  
  14.     public static void main(String[] args) { 
  15.         Child boy = new Child("Charley"); 
  16.         System.out.println(boy.getName()); 
  17.  
  18.         Child girl = new Child("Queenie"); 
  19.         girl.printName(); 
  20.  
  21.         boy.love(girl.getName()); 
  22.         girl.love(boy.getName()); 
  23.     } 
  24.  
  25. abstract class Children { 
  26.     private String name; 
  27.  
  28.     public Children(String name) { 
  29.         this.name = name; 
  30.     } 
  31.  
  32.     //private then Child obj can not access this method 
  33.     //private String getName() { 
  34.     public String getName() { 
  35.         return name; 
  36.     } 
  37.  
  38.     abstract void printName(); 
  39.  
  40.     //haha()在子类中没有被实现 
  41.     //abstract void haha(); 
  42.  
  43. interface Lover{ 
  44.     void love(String name); 
抽象类和接口的应用
我看了thinking in java里面的内容,感觉似乎用抽象类或者接口实现的效果都差不多,没看出什么特别。那么究竟什么时候应用抽象类,什么时候应用接口呢?看了广泛流传的报警门例子,思考后得到的理解是:抽象类,"is a"关系,抽象出共同的本质特征,单一继承;接口,"like a"关系,个性化特征,多重继承。
 
不同的门都具有本质特征动作 open(), close()。那么抽象类和接口都可以定义这两个方法。现在要求它具有报警alarm功能。
1) 如果这3个功能都放在抽象类里面,那么所有的门都具备了这3个功能,无疑不妥,有的门不需要报警功能啊!
2) 如果这3个功能都放到接口里面,需要用到报警功能的其他类,就需要实现门的open和close功能,这样子也不对!
 
所以,应该把门的open, close和alarm分离,让所有的门都有open, close动作,继承抽象类Door。而需要添加报警功能的门,则再继承接口Alarm。
  1. abstract class Door { 
  2.   abstract void open(); 
  3.   abstract void close(); 
  4.  
  5. interface Alarm { 
  6.   void alarm(); 
  7.  
  8. class AlarmDoor extends Door implements Alarm { 
  9.   void open() { … } 
  10.   void close() { … } 
  11.   void alarm() { … } 
 
可以看出,因为抽象类是用于单一继承,接口是用于多重继承,所以需要这样安排。而同时看到,抽象类就是类的本质特征,共同的;接口是个性化的,你想让类更具个性化,则继承其他相应个性特征的接口。

转载于:https://www.cnblogs.com/ericsun/p/3337251.html

Java接口的实现原理是基于面向对象编程中的抽象类多态性的概念。接口定义了一组规范,而实现接口的类必须实现其中的所有方法,从而满足该规范。实现接口的类可以是任何类,只要它们实现了接口中定义的所有方法。 接口的作用是定义一组规范,使得代码更加灵活可扩展。它可以让程序员定义一组方法,而不需要实现这些方法。这样,其他程序员可以通过实现这些方法来扩展程序的功能。接口还可以用来实现多重继承,通过实现多个接口,一个类可以获得多个父类的特性。 在Java中,接口使用关键字“interface”来定义,其语法形式如下: ``` public interface InterfaceName { // 声明接口中的方法 } ``` 接口中的方法默认是抽象方法,因此不能在接口中实现方法的具体代码。实现接口的类必须实现接口中的所有方法,否则必须声明为抽象类接口中也可以定义常量静态方法,但不能定义实例变量。 实现接口的类必须使用“implements”关键字来实现接口,其语法形式如下: ``` public class ClassName implements InterfaceName { // 实现接口中的方法 } ``` 在实现接口的类中,必须实现接口中定义的所有方法。如果一个类实现了多个接口,那么它必须实现所有接口中定义的方法。如果多个接口中定义了相同的方法,则实现类只需要实现一次该方法即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值