zoukankan      html  css  js  c++  java
  • java 抽象类

    一、抽象类

    用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规定,当一个类里面有抽象方法时,这个类必须被声明为抽象类。

      子类继承父类时,如果这个父类里有抽象方法,并且子类觉得可以去事先父类的所有抽象方法,那么子类必须去实现父类的所有抽象方法。

      如果再父类的抽象方法里,子类如果觉得实现不了,那么把子类也声明为一个抽象类。

  • 相关阅读:
    浏览器内核
    link和@import的区别
    跨域iframe如何通信
    数组、对象基本操作
    浏览器兼容性问题
    微信H5开发
    前端面试整理
    js多维数组转一维数组
    js实现继承
    javascript函数闭包(closure)
  • 原文地址:https://www.cnblogs.com/lobsterIT/p/4807124.html
Copyright © 2011-2022 走看看