zoukankan      html  css  js  c++  java
  • java面对对象-抽象类与接口

    一、抽象类:abstract

    抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。

      包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

      1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

      2)抽象类不能用来创建对象,但是它可以有构造方法,用来帮助子类实例化。

      3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

     抽象类的具体实例如下:

    复制代码
    //定义一个抽象类,切记它不能用来创建对象
    abstract class Employee
    {
            //声明受保护的属性
        protected String name;
        protected String id;
        protected double pay;
    
            //抽象类的构造方法
        public Employee(String name,String id,double pay)
        {
              this.name = name;
              this.id = id;
              this.pay = pay;
        }
            //抽象类的普通成员方法
        public void print()
        {
         System.out.println("name = "+name+"id = "+id+"pay = "+pay);
        }
           
            //抽象类的抽象方法,子类必须实现该方法,不然子类也是抽象类
        public abstract void work();
    }

    //抽象类的一个子类 class Pro extends Employee { public Pro(String name,String id,double pay) { //调用父类的构造函数进行初始化
    super(name,id,pay); } //实现了父类中的抽象方法,所以子类不再是抽象类 public void work() { System.out.println("Pro work"); } } //抽象类的另一个子类 class Manager extends Employee { private double bonus; public Manager(String name,String id,double pay,double bonus) {
    //调用父类的构造方法进行初始化 super(name,id,pay); this.bonus = bonus; } //实现了父类中的方法,所以子类不再是抽象类 public void work() { System.out.println("Manager work"); } } //测试类 class YuanGongDemo { public static void main(String[] args) { Pro p1 = new Pro("Liding","jfisd",578.5); p1.work(); Manager p2 = new Manager("LiNing","技术部",4578.5,786.75); p2.work(); } }
    复制代码

    二、接口:Interface

    Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

    接口的主要特点:

    1、接口中的成员变量默认都是public、static、final类型的,必须被显示初始化。

    2、接口中的方法默认都是public、abstract类型的。

    3、接口中只能包含public、static、final类型的成员变量和public、abstract类型的成员方法。

    4、接口没有构造方法,不能被实例化。

    5、一个接口不能实现另一个接口,但它可以继承多个其他接口。

    6、接口必须通过类来实现它的抽象方法。

    7、与子类继承抽象父类相似,当类实现了某个接口时,它必须实现接口中所有的抽象方法,否则这个类必须被定义为抽象类。

    8、一个类只能继承一个直接的父类,但能实现多个接口。

    多态的功能扩展
    基于电脑的实例(电脑主板)
    扩展(网卡、声卡、、、)

    复制代码
    interface PCI             //扩展功能的接口(规则)
    {
        public abstract void open();
        public abstract void close();
    }
    
    class MainBoard 
    {
        public void run()
        {
            System.out.println("Mi anBoard run");
        }
        public void usePCI(PCI p)  //PCI p = new NetCard() //接口型的引用指向自己的子类对象
        {
            p.open();
            p.close();
        }    
        
    }
    
    class NetCard implements PCI     // 实现网卡的连接
    {
        public void open()
        {    
          System.out.println("NetCard open");
        }
        public void close()
        {
           System.out.println("NetCard close");
        }
    }
    
    class SoundCard  implements PCI    // 实现声卡的连接
    {
        public void open()
        {    
          System.out.println("soundcard open");
        }
        public void close()
        {
           System.out.println("soundcard close");
        }
    }
    
    
    class DuoTaiDemo1   //测试类
    {
        public static void main(String[] args)
        {
            MainBoard mb = new MainBoard();
            mb.run();
            mb.usePCI(new NetCard());
            mb.usePCI(new SoundCard());
        }
    }
    复制代码
    总结:抽象类和接口的区别

           1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

       2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

       3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

       4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

           5)抽象类中的方法子类必须全部实现,不然子类也是抽象类,而接口中的抽象方法子类必须全部实现,是可选择实现的。

           6)抽象类是一种模板设计模式,而接口是一种行为规范。

  • 相关阅读:
    HDU2159 二维完全背包
    HDU1401 BFS
    HDU2842 矩阵乘法
    CF2.E
    CF2.D
    *HDU2254 矩阵乘法
    CF2.C
    *HDU1907 博弈
    博弈
    *HDU2147 博弈
  • 原文地址:https://www.cnblogs.com/wuqiance/p/11581147.html
Copyright © 2011-2022 走看看