zoukankan      html  css  js  c++  java
  • Java(八)——面向对象(4)-抽象类与接口

    一、抽象类(abstract)

    如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰。

    因为无法执行抽象方法,因此这个类也必须申明为抽象类

    • 使用abstract修饰的类就是抽象类。我们无法实例化一个抽象类
    • 抽象类定义了抽象方法,那么,在继承它的子类,就必须覆写run()方法
    • 抽象类中只定义规范,没有具体逻辑,具体的业务逻辑由不同的子类实现
    • 抽象类可以含有抽象方法,也可以不包含抽象方法,抽象类中可以有具体的方法
    public class Main {
        public static void main(String[] args) {
            Person p = new Student();
            p.run();
        }
    }
    
    // Person为抽象类,只是规定了规范
    abstract class Person {
        // 抽象方法,没有函数体,不会执行,只是一个规范,子类必须对其进行重写
        public abstract void run();
    }
    
    class Student extends Person {
        
        // 继承抽象类,必须重写其抽象方法
        @Override
        public void run() {
            System.out.println("Student.run");
        }
    }
    
    

    二、接口(interface)

    接口是一个特殊的抽象类。接口的所有方法全部都是抽象方法,没有方法体

    1、接口使用interface修饰,使用implements来调用接口
    2、接口不能被实例化
    3、一个类只能继承一个类,但是可以实现多个接口
    4、接口中方法均为抽象方法;接口中可以有变量,但是要被初始化,用  public final   修饰
    5、接口中不能包含实例域或静态方法(静态方法必须实现,接口中方法是抽象方法,不能实现)
    6、一个接口不能继承其它的类,但是可以继承别的接口
    
    interface Person{
        // 在接口中 public final 和 public abstract 可以省略
        
        // 接口中的变量必须定用final修饰,即常量
        (public final) int a = 1;
        String b = "aaa";      // 变量一旦赋值就不可更改,为final修饰,final可以省略
        
       (public abstract) void setName();
        
    }
    
    public class Student implements Person{
        public void setName(){
           ...
        }
    }
    
    • 一个interface可以继承自另一个interface
    interface Hello {
        void hello();
    }
    
    interface Person extends Hello {
        void run();
        String getName();
    }
    
  • 相关阅读:
    维克里拍卖 Vickrey auction
    弱占优策略--Weakly Dominant Strategy
    乱码电路(Garbled circuits)
    P和NP问题
    揭秘Facebook首个数据中心:全球15亿用户的账户信息都在这里
    数学符号“s.t.”的意义
    PKI系统深入介绍
    [转]公钥,私钥和数字签名这样最好理解
    Exif
    任我行 CRM 9.4
  • 原文地址:https://www.cnblogs.com/linagcheng/p/12166785.html
Copyright © 2011-2022 走看看