• Java接口和抽象类的理解


    接口和抽象类的相同之处就是 都会有抽象方法

    抽象方法就是一个没有方法体 等待继承的子类完成的方法

    然而接口比较严格 它的方法必须是抽象方法且是公开的 

    抽象类 可以有自己的属性 和 实体方法

     1 package com.jay;
     2 
     3 
     4 public abstract class Dog {
     5     String kind = "dog";
     6 
     7     void playGame() {
     8         System.out.println("The dog is playing game");
     9     }
    10 
    11     abstract void makeMoney();
    12 }

    有一个抽象类Dog,可以把abstract理解成这是一个混子类,也就是这个Dog可能会有一些事自己不想做想让别人去做

    这个Dog有自己得种类kind,指示自己只一条

    有一个自己方法playGame(),如果是自己特有的不让儿子继承的化,可以加修饰符private。//不多解释了

    然后这个Dog这辈子没有赚多少钱,希望儿子多赚点钱,将自己的遗愿让儿子继承,于是有了抽象方法 makeMoney()

    儿子感动了于是打算完成父亲的遗愿赚钱于是乎

    package com.jay;
    
    
    public class Son extends Dog{
        
        @Override
        void makeMoney() {
            System.out.println("The son of dog made more money");
        }
    }

    这个儿子实现父亲的遗愿。

    这是好的一方面,结果这个儿子也是不学无术,不想赚钱。于是乎

    package com.jay;
    
    
    public abstract class Son extends Dog{
        
    }

    自己也成为了一个混子,把这件没有完成的事留给下个继承人。

    可以看得出来抽象类它也是一个类。

    首相用面向对象的思想来理解,类其实就是将生活中客观存在的对象,将对象的属性和特性封装起来

    而接口与类不同,它不可以被实例化(这里指单独将接口实例化),因为它不可以当作一个对象

    接口可以被理解为一种技能,功能。比如一扇门门可以有防盗及这个技能也可以同时拥有报警的功能

    也就是说 一个类可以实现多个接口

    这里有一个学习的接口,定义了学习数学和学习计算机的方法,

    package com.jay;
    
    
    public interface Learn {
        void learnMath();
    
        void learnComputer();
    }

    然后这是一个烹饪的方法

    package com.jay;
    
    
    public interface Cooking {
    
        void cookingFish();
    
        void cookingBone();
    }

    然后这狗很勤劳都继承这些技能,并且实现

     1 package com.jay;
     2 
     3 
     4 public class Son extends Dog implements Learn, Cooking {
     5 
     6     @Override
     7     void makeMoney() {
     8         System.out.println("The son of dog made more money");
     9     }
    10 
    11     @Override
    12     public void cookingFish() {
    13         System.out.println("cookingFish");
    14     }
    15 
    16     @Override
    17     public void cookingBone() {
    18         System.out.println("cookingBone");
    19     }
    20 
    21     @Override
    22     public void learnMath() {
    23         System.out.println("learnMath");
    24     }
    25 
    26     @Override
    27     public void learnComputer() {
    28         System.out.println("learnComputer");
    29     }
    30 }

    当然如果是什么都不去实现,也可以在class上加abstract修饰符告诉他人这里有未完成的方法

    package com.jay;
    
    
    public abstract class Son extends Dog implements Learn, Cooking {
    
    
    }

    当然你也是可以加abstract修饰以后有选择性的选择几个抽象方法去实现

    然而每个子类只能有一个父类

    Java 是只能单继承的一门编程语语言 

    可以这样说,一个 木头(object)  被制作(继承) 成 一扇门 那么这个物体就只能成为门,它

    就不可以成为汽车或者是电脑

    抽象类和一般的类的区别就是 在抽象类中有抽象方法

    抽象方法必须在抽象类中 当子类继承一个抽象类的时候 子类必须完成父类的抽象方法

    或者子类也成为抽象方法

    抽象类就是表示在这个类中有抽象方法(声明一个没有抽象方法的抽象类是没有意义的)等待子类去实现抽象方法

  • 相关阅读:
    【习题 8-9 1613】 K-Graph Oddity
    【习题 8-8 UVA
    【Hello 2018 D】Too Easy Problems
    【Hello 2018 C】Party Lemonade
    【Hello 2018 B】Christmas Spruce
    【Hello 2018 A】 Modular Exponentiation
    【习题 8-7 UVA
    【习题 8-6 UVA
    【习题 8-4 UVA
    【习题 8-3 UVA
  • 原文地址:https://www.cnblogs.com/97jay/p/6914377.html
Copyright © 2020-2023  润新知