zoukankan      html  css  js  c++  java
  • Java中的抽象类和接口

    抽象类的概述:我们把一个不是具体的功能成为抽象的功能,而一个类中如果有抽象的功能就是抽象类

    抽象类的特点:
    A:抽象类和抽象方法必须用abstract关键字修饰
    B:抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类
    C:抽象类不能实例化
    因为它不是具体的。
    抽象类有构造方法,但是不能实例化?构造方法的作用是什么呢?
    用于子类访问父类数据的初始化
    D:抽象的子类
    a:如果不想重写抽象方法,该子类是一个抽象类。
    b:重写所有的抽象方法,这个时候子类是一个具体的类。
    抽象类的实例化其实是靠具体的子类实现的,是多态的方式。

    举例:

    abstract class Animal {
        //抽象方法
        //public abstract void eat(){} //空方法体,这个会报错。抽象方法不能有主体
        public abstract void eat();
        
        public Animal(){}
    }
    
    //子类是抽象类
    abstract class Dog extends Animal {}
    
    //子类是具体类,重写抽象方法
    class Cat extends Animal {
        public void eat() {
            System.out.println("猫吃鱼");
        }
    }
    
    class AbstractDemo {
        public static void main(String[] args) {
            //创建对象
            //Animal是抽象的; 无法实例化
            //Animal a = new Animal();
            //通过多态的方式
            Animal a = new Cat();
            a.eat();
        }
    }

     注意:abstract不能和private final static这些关键字共存.

    二 接口:在java中不允许一个类继承多个多个父类,但是要实现“一个类继承多个类的功能”就可以用接口,一个类实现多个多个接口从而间接实现多重继承。从本质上讲,接口也是一种抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。个人感觉和OC中的分类与拓展类似,当然具体细节还是不一样的

    接口的特点:

    A:接口用关键字interface表示   interface 接口名 {}
    B:类实现接口用implements表示  class 类名 implements 接口名 {}
    C:接口不能实例化
    那么,接口如何实例化呢?
    按照多态的方式来实例化。
    D:接口的子类
    a:可以是抽象类。但是意义不大。
    b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)

    接口成员特点
    成员变量;只能是常量,并且是静态的。
    默认修饰符:public static final
    建议:自己手动给出。
    构造方法:接口没有构造方法。
    成员方法:只能是抽象方法。
    默认修饰符:public abstract
    建议:自己手动给出。

    所有的类都默认继承自一个类:Object。
    类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。

    //定义一个接口
    interface Animal{
        //接口的方法不能带有主体也就是不能有大括号 
        public abstract  void jump();
    }
    //抽象类实现接口
    abstract class Dog implements Animal {
        //抽象类可以不实现方法
    }
    //具体类实现接口
    class Cat implements Animal{
        //在这里必须要实现方法,不然会报错
        public void jump(){
            System.out.println("猫跳");
        }
    }
    //超类
    class Monkey extends Object implements Animal {
        public void jump(){
            System.out.println("猴子上蹿下跳");
        }
    }

    当抽象类和接口作为形式参数时,抽象类需要的是该抽象类的子类的对象,接口需要的是该接口实现类的对象

    当抽象类和接口作为返回值时, 抽象类返回的是该抽象类的子类的对象,接口返回的是该接口实现类的对象

  • 相关阅读:
    CodeForces Gym 100500A A. Poetry Challenge DFS
    CDOJ 486 Good Morning 傻逼题
    CDOJ 483 Data Structure Problem DFS
    CDOJ 482 Charitable Exchange bfs
    CDOJ 481 Apparent Magnitude 水题
    Codeforces Gym 100637G G. #TheDress 暴力
    Gym 100637F F. The Pool for Lucky Ones 暴力
    Codeforces Gym 100637B B. Lunch 找规律
    Codeforces Gym 100637A A. Nano alarm-clocks 前缀和
    TC SRM 663 div2 B AABB 逆推
  • 原文地址:https://www.cnblogs.com/losedMemory/p/6083605.html
Copyright © 2011-2022 走看看