• Java 抽象类和接口


    一.抽象类

    1.定义

    抽象类指提供方法,但是未提供方法体(实现方法)的类,抽象类用来被子类继承,子类通过方法的重写实现抽象方法。

    注:1)抽象类中不一定包含抽象类,它可能只是abstract修饰的类;包含抽象方法的类一定是抽象类。

          2)抽象类一旦被继承,子类需要实现所有的抽象方法,否则子类也要用abstract修饰.

          3)抽象类不能实例化,但是可以在创建抽象类的同时,提供抽象方法的实现。

          4)抽象类可以拥有自己的成员变量及成员方法。

    2.格式

    抽象类:[public] + abstract +类名

    抽象方法:[public] /protected +类型+方法名称();

    注:abstract不能修饰私有方法,静态方法和构造方法。

    3.理解

    在面向对象的过程中,类可以描述对象,但是有些类并不提供具体的方法(足够的信息)来描述具体的对象。比如有对象new Animal(),对象是什么动物,怎么叫,什么样子,我们并不知道,需要在子类(Cat,Dog)中提供具体的数据。总的来说,抽象类是对事物的抽象。

     4.实例

    public abstract class Animal {
         int i=0;                          //如果为静态变量则直接调用,非静态变量创建对象(实例化的同时要重写抽象方法)后调用。
         abstract void shout();     //构造抽象方法
     }
    
    public class Cat extends Animal{
    
        public void shout() {                           //子类重写抽抽象方法
    
        System.out.println("猫叫:喵喵...");    
    
        }
         public static void main(String[] args) {
                Animal a1 = new Cat();   //抽象类在实例化的时候,引用指向子类,子类不是抽象类;不会报错;如果子类在上面不重写抽象方法,这里将会报错,即子类为抽象类。   
                a1.shout();
                a1.i=2;
    
                Animal a2 = new Animal(){                //抽象类实例化的同时重写抽象方法。
                void shout() {
                     System.out.println("喵");    
                     }
                };
                a2.shout();
                a2.i=3;        
        }
    }

    二.接口

    1.定义

    接口可以说是一种更加彻底的抽象类,它是对行为特性进行抽象,它只有常量和抽象方法。

    2.格式

    2.1创建接口

    interface + 接口名称{

    常量:[public static final]+ 类型 + 常量名称=?; (需要给常量初始化)

    抽象方法:[public abstract] + 方法名称();

    }

    2.2接口的使用

    子类 + implements + 接口名称1,2,3..{}

    注:一个子类可使用多个接口。

    3.实例

    以飞机为例,所有的飞机都有起飞,着陆功能:

    1 abstract class Plane{
    2     abstract void launch();
    3     abstract void land();
    4 }
    5 //或者
    6 interface Plane{
    7      void launch();
    8      void land();
    9 }

    然而一些飞机(战斗机Battleplane)具有开火(fire)功能,实现方法如下:

    1.在抽象类Plane中添加开火功能:abstract void fire();或者在接口Plane中添加开火功能:void fire();

    2.新建一个抽象类Fire并添加开火功能

    1 abstract class Fire{
    2     abstract void fire();
    3 
    4   }

    3.新建一个接口Fire冰添加开火功能

    1 interface Fire{
    2     void fire();
    3 
    4   }

    筛选:1.子类battleplane可以继承该抽象类或者实现该接口,但是其他子类(客机之类)不适用,舍弃;2.子类Battleplane不能同时继承两个父类,舍弃;3.子类Battleplane继承父类Plane,并且实现接口Fire,其他子类(客机之类的)可以继承该抽像类,没有开火功能,则不实现该接口。

    具体代码如下:

     1 public class Battleplane extends Plane implenments Fire{
     2 
     3             public void launch(){
     4                     System.out.println("起飞“);
     5              }
     6 
     7             public void land(){
     8                     System.out.println("着陆”);
     9              }
    10 
    11              public void fire(){
    12                      System.out.println("开火“);
    13               }
    14 
    15           public static void main(String args[]){
    16                    Battleplane bp=new Battleplane();
    17                           bp.launch();
    18                           bp.land();
    19                           bp.fire();
    20              }      
    21 }        

     

    !!!

                         

  • 相关阅读:
    Educational Codeforces Round 28 B. Math Show
    Educational Codeforces Round 28 A. Curriculum Vitae
    Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) D. Jury Meeting
    Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) C. Planning
    2017 Multi-University Training Contest 2 hdu 6047
    2017 Multi-University Training Contest 2 hdu 6045
    2017 Multi-University Training Contest 1 hdu 6043
    2017 Multi-University Training Contest 1 hdu 6034
    2017 Multi-University Training Contest 1 hdu 6033
    poj 2104主席树求区间第k小
  • 原文地址:https://www.cnblogs.com/jfl-xx/p/4688566.html
Copyright © 2020-2023  润新知