Java关键字abstract 与 抽象接口区别
2017-06-04 18:19
579 查看
abstract 关键字可以修饰类或方法。
abstract 类可以扩展(增加子类),但不能直接实例化。
abstract 方法不在声明它的类中实现,但必须在某个子类中重写。
abstract 类不能实例化。
仅当 abstract 类的子类实现其超类的所有 abstract 方法时,才能实例化 abstract 类的子类。这种类称为具体类,以区别于 abstract 类。
如果 abstract 类的子类没有实现其超类的所有 abstract 方法,该子类也是 abstract 类。
abstract 关键字不能应用于 static、private 或 final 方法,因为这些方法不能被重写,因此,不能在子类中实现。
final 类的方法都不能是 abstract,因为 final 类不能有子类。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
abstract作为修饰符,可以修饰类和方法。
1.抽象类: 不能手动创建对象(JVM可以创建抽象类的对象),但是可以声明抽象类型的引用。
2.抽象方法:有方法名的定义,没有实现,(只定义了能做什么,没定义怎么做)
抽象方法的好处是允许方法的定义和实现分开。
抽象类和抽象方法的关系:含有抽象方法的类一定是抽象类,抽象类里不一定含有抽象方法
抽象类存在的意义是用来被继承的。一个类继承了一个抽象类,必须实现抽象类里面所有的抽象方法,否则,此类也是抽象类。
可以声明父类类型子类对象,利用多态调用抽象方法
抽象类有构造方法,有父类的,也遵循单继承的规律
抽象和接口区别:
abstract 类可以扩展(增加子类),但不能直接实例化。
abstract 方法不在声明它的类中实现,但必须在某个子类中重写。
示例
public abstract class MyClass { }
public abstract String myMethod();
注释
采用 abstract 方法的类本来就是抽象类,并且必须声明为 abstract。abstract 类不能实例化。
仅当 abstract 类的子类实现其超类的所有 abstract 方法时,才能实例化 abstract 类的子类。这种类称为具体类,以区别于 abstract 类。
如果 abstract 类的子类没有实现其超类的所有 abstract 方法,该子类也是 abstract 类。
abstract 关键字不能应用于 static、private 或 final 方法,因为这些方法不能被重写,因此,不能在子类中实现。
final 类的方法都不能是 abstract,因为 final 类不能有子类。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
abstract作为修饰符,可以修饰类和方法。
1.抽象类: 不能手动创建对象(JVM可以创建抽象类的对象),但是可以声明抽象类型的引用。
public class TestAbstract1{ public static void main(String[] args){ //Animal a=new Animal(); //error Animal a=null; a=new Dog(); } } abstract class Animal{ } class Dog extends Animal{ } |
抽象方法的好处是允许方法的定义和实现分开。
abstract class Animal{ public abstract void eat(); } |
抽象类存在的意义是用来被继承的。一个类继承了一个抽象类,必须实现抽象类里面所有的抽象方法,否则,此类也是抽象类。
abstract class Animal{ public void run(){} public abstract void sleep(); public abstract void eat(); } class Dog extends Animal{ public void sleep(){ System.out.println("Dog sleep."); } public void eat(){ System.out.println("Dog eat."); } } abstract class Cat extends Animal{ public void eat(){ System.out.println("Cat eat."); } } |
public class TestAbstract1{ public static void main(String[] args){ Animal a=null; a=new Dog(); a.sleep(); a.eat(); } } |
class E{} abstract class Animal extends E{ public Animal(){ super(); } } |
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的, 另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。 还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
相关文章推荐
- java之接口(interface)和抽象(abstract)关键字详解
- java高级篇----抽象与接口的区别
- Java中 关键字final,抽象类abstract, 接口interface ,多态
- Java之抽象(abstract)类、接口(interface)的用法总结
- java之抽象对象和类与接口的区别
- Java抽象与接口的区别
- 只为java 接口和抽象区别
- java继承、抽象、接口介绍及区别
- Java重修之路(九)面向对象之final关键字,抽象类(abstract),接口(interface)
- Java中抽象和接口的联系与区别
- 深入浅出:重温JAVA中接口与抽象的区别
- 虚方法virtual、抽象方法abstract、接口interface区别
- [Java] 接口(Interface)与 抽象类 (Abstract)使用规则和区别
- Java之抽象abstract关键字
- 关于抽象、继承中virtual、abstract、override、new关键字的区别
- 黑马程序员——Java基础:继承、final关键字、抽象、接口、多态
- JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展
- JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展
- 2018/01/08JAVA 基础 / 接口与继承 / JAVA 抽象类详解:修饰符“abstract"、抽象类与接口的区别
- Java基础(八) Java修饰符及接口详解之(一)static/final/abstract关键字及接口的使用