zoukankan      html  css  js  c++  java
  • 抽象类和接口的区别

    这个也是很多笔试或者面试中经常出现的一个问题

    首先我们要理解抽象类是什么

    在面向对象领域中,万物皆对象,同时所有的对象都是通过类来描述。但是并不是所有的类都是来描述对象的

    比如说new Animal(),这是产生了一个新的类,但是animal是什么,我们不知道,他没有具体的动物的概念,所以他是一个抽象类。需要cat、dog这种具体的动物来进行描述

      抽象类需要其他具体的类来支撑。

      在面向对象领域中,由于抽象的概念在问题领域没有对应的具体概念,所以表现抽象概念的抽象类不能被实例化。

      抽象类体现类数据抽象,是实现多态的机制,这组抽象方法的具体由它的派生类来实现。抽象类的存在就是为了继承

      抽象类的注意点:

       1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。

             2、抽象方法必须由子类来进行重写。

             3、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。

             4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。

             5、子类中的抽象方法不能与父类的抽象方法同名。

             6、abstract不能与final并列修饰同一个类。

    实例:

     1 public abstract class Animal {  
     2     public abstract void eat();  
     3 }  
     4   
     5 public class Cat extends Animal{  
     6   
     7     @Override  
     8     public void eat() {  
     9         System.out.println("猫吃鱼...");  
    10     }  
    11 }  
    12   
    13 public class Dog extends Animal{  
    14   
    15     @Override  
    16     public void eat() {  
    17         System.out.println("狗吃骨头...");  
    18     }  
    19   
    20 }  
    21   
    22 public class Test {  
    23   
    24     public static void main(String[] args) {  
    25         Animal a1 = new Cat();  
    26         Animal a2 = new Dog();  
    27           
    28         a1.eat();  
    29         a2.eat();  
    30     }  
    31 }  
    32   
    33 --------------------------------------------------------------------  
    34 Output:  
    35 猫吃鱼...
    36 狗吃骨头...
       Animal a1 = new Cat();  
       Animal a2 = new Dog(); 
    向上转型
    接口
    接口本身不是类,所以不能被实例化,我们只能new它的实现类

    实现该接口的实现类必须要实现接口的所有方法。

    implement实现接口,接口实际上类似抽象类的一种延续,Java中的单继承,但是接口可以多实现

     在使用接口过程中需要注意如下几个问题:

             1、Interface的所有方法访问权限自动被声明为public。确切的说只能为public,当然你可以显示的声明为protected、private,但是编译会出错!

             2、接口中可以定义“成员变量”,或者说是不可变的常量,因为接口中的“成员变量”会自动变为为public static final。可以通过类命名直接访问:ImplementClass.name。

             3、接口中不存在实现的方法。

             4、实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。

             5、不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。

             6、在实现多接口的时候一定要避免方法名的重复。

     
  • 相关阅读:
    Java学习过程中的总结的小知识点(长期更新)
    年月日与time的相互转换
    Androidstudio预览时出现错误java.lang.NoClassDefFoundError: com/android/util/PropertiesMap
    eclipse中配置struts2出现There is no Action mapped for namespace [/] and action name [Login] associated wi
    struts2出错java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
    第一次部署Struts2时出现错误java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.class
    由JDK1.8降为JDK1.6时配置环境变量不起作用
    Androidstudio报错UnsupportedClassVersionError
    AndroidStudio导入Library
    Ubuntu下su被拒绝
  • 原文地址:https://www.cnblogs.com/Darius-Bennett/p/7849556.html
Copyright © 2011-2022 走看看