标签:
一、抽象类
用Abstract 关键字来修饰一个类时,这个类叫做抽象类;用Abstract类来修饰一个方法时,这个方法叫抽象方法。
含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写
抽象类不能被实例化
抽象方法秩序声明而不须事先
package javastudy.summary; /** * 父类Animal * 在class的前面加上abstract,即声明成这样:abstract class Animal * 这样Animal类就成了一个抽象类了 */ abstract class Animal { public String name; public Animal(String name) { this.name = name; } /** * 抽象方法 * 这里只有方法的定义,没有方法的实现。 */ public abstract void enjoy(); } /** * 这里的子类Cat从抽象类Animal继承下来,自然也继承了Animal类里面声明的抽象方法enjoy(), * 但子类Cat觉得自己去实现这个enjoy()方法也不合适,因此它把它自己也声明成一个抽象的类, * 那么,谁去实现这个抽象的enjoy方法,谁继承了子类,那谁就去实现这个抽象方法enjoy()。 * @author gacl * */ abstract class Cat extends Animal { /** * Cat添加自己独有的属性 */ public String eyeColor; public Cat(String n, String c) { super(n);//调用父类Animal的构造方法 this.eyeColor = c; } } /** * 子类BlueCat继承抽象类Cat,并且实现了从父类Cat继承下来的抽象方法enjoy * @author gacl * */ class BlueCat extends Cat { public BlueCat(String n, String c) { super(n, c); } /** * 实现了抽象方法enjoy */ @Override public void enjoy() { System.out.println("蓝猫叫..."); } } /** * 子类Dog继承抽象类Animal,并且实现了抽象方法enjoy * @author gacl * */ class Dog extends Animal { /** * Dog类添加自己特有的属性 */ public String furColor; public Dog(String n, String c) { super(n);//调用父类Animal的构造方法 this.furColor = c; } @Override public void enjoy() { System.out.println("狗叫...."); } } public class TestAbstract { /** * @param args */ public static void main(String[] args) { /** * 把Cat类声明成一个抽象类以后,就不能再对Cat类进行实例化了, * 因为抽象类是残缺不全的,缺胳膊少腿的,因此抽象类不能被实例化。 */ //Cat c = new Cat("Catname","blue"); Dog d = new Dog("dogname","black"); d.enjoy();//调用自己实现了的enjoy方法 BlueCat c = new BlueCat("BlueCatname","blue"); c.enjoy();//调用自己实现了的enjoy方法 } }
Java规定,当一个类里面有抽象方法时,这个类必须被声明为抽象类。
子类继承父类时,如果这个父类里有抽象方法,并且子类觉得可以去事先父类的所有抽象方法,那么子类必须去实现父类的所有抽象方法。
如果再父类的抽象方法里,子类如果觉得实现不了,那么把子类也声明为一个抽象类。
标签:
原文地址:http://www.cnblogs.com/lobsterIT/p/4807124.html