• abstract修饰符


    abstract表示抽象的,是最重要的一个修饰符,可以修饰类和方法。分别叫做抽象方法和抽象类。人们在认识事物的时候,会把具有相同特征和行为的事物归为一个抽象类。比如动物就是一个很抽象的概念。当得到动物的实例时,总是某个具体物种的实例。所以说,在需要某个抽象类的实例时,只能够用某个具体类的实例来代替。抽象类不能实例化,不能生成抽象类的对象,但能定义一个引用。

    • abstract修饰类:

    会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型。

    抽象类就相当于一个类的半成品,需要子类继承并覆盖其中的抽象方法,这时子类才又创建实例的能力,如果子类没有实现父类的抽象方法,那么子类也要为抽象类。

    • abstract修饰方法:

    会使这个方法变成抽象方法,也就是只有声明而没有实现,实现部分以“;”代替,需要子类继承实现。

    抽象方法代表了某种标准,定义标准,定义功能,在子类中去实现功能(子类继承了父类并需要给出从父类继承的抽象方法的实现)。

    方法一时间想不到怎么被实现,或有意要子类去实现而定义某种标准,这个方法可以被定义为抽象。

    • 注意:

    有抽象方法的类一定是抽象类。但是抽象类中不一定都是抽象方法,也可以全是具体方法。

    当一个非抽象类继承自某个抽象类时,必须实现所继承抽象类的所有抽象方法,即抽象类的第一个非抽象子类必须要实现其父类所有的抽象方法。其中也包括了父类继承的抽象方法。

    一个类中只要包含有抽象方法,那么这个类就必须被定义成抽象类,反之,即使一个类不包含任何抽象方法,这个类仍然可以被定义成抽象类。

    abstract和final不能同时使用,这两个关键字有着相反的含义。abstract修饰方法和类,就是想让别人重写或者是继承的,而final是组织重写和继承的。private和abstract也不能同时修饰方法。因为private组织继承,也就阻止了重写实现,与abstract的意义相违背。

    
    /**  
     * @param args  
     * 这个类中有多个类,注意他们之间的关系   
     * 这个程序测试抽象方法和抽象类  
     * 抽象类之间的集成和非抽象类继承抽象类,实现抽象方法  
     */  
    
    public class AbstractTest {
    
         public static void main(String[] args) {
    
            // TODO Auto-generated method stub
    
            Shepherd shepherd=new Shepherd();
    
            shepherd.eat();
    
            shepherd.run();
    
            Chihuahua chihuahua=new Chihuahua();
    
            chihuahua.eat();
    
            chihuahua.run();
    
         }
    
    }
    
    
    
    abstract class Animal {//抽象类Animal
    
        public abstract void eat();
    
    } 
    
    
    
    //抽象类Dog,继承自Animal,有抽象方法run,继承了父类的抽象方法eat  
    abstract class Dog extends Animal {
    
        public abstract void run();
    
        @Override
    
        public void eat() {
    
        // TODO Auto-generated method stub
    
    
    
        }
    
    }
    
    
    
    //Chihuahua继承了抽象类Dog,实现了Dog的方法run和其继承的抽象类的eat方法  
    class Chihuahua extends Dog {
    
    
    
        @Override
    
        public void run() {
    
            System.out.println("吉娃娃活泼的很,向前跑");
    
        }
    
        @Override
    
        public void eat(){
    
            System.out.println("吉娃娃池的好少");
    
        }
    
    }
    
    
    
    //Shepherd继承了Dog,实现了Dog的方法run和其继承的抽象类的eat方法    
    class Shepherd extends Dog {
    
        @Override
    
        public void run() {
    
            System.out.println("牧羊犬跑得好快去接飞盘");
    
        }
    
        @Override
    
        public void eat(){
    
            System.out.println("牧羊犬齿东西狼吞虎咽的");
    
        }
    
    }
  • 相关阅读:
    【20171030早】sqli-libs Less7-15 练习
    【20171029中】sqli-libs 注入的过程 less1-4
    【20171028早】ubuntu 16.04 LTS 安装php遇到的问题
    【20171027早】alert(1) to win 第9,10,11,12题
    【20171026早】alert(1) to win
    【20171025晚】alert(1) to win 第五题 正则表达式过滤
    【20171025中】alert(1) to win 脚本渲染自建
    【20171025早】alert(1) to win 练习
    mysql 导入 excel 数据
    我的书单
  • 原文地址:https://www.cnblogs.com/yuyu666/p/9733503.html
Copyright © 2020-2023  润新知