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("猴子上蹿下跳");
        }
    }

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

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

  • 相关阅读:
    [转]iOS框架和服务
    [Tips]统计Xcode代码行数
    [转]10个迷惑新手的Cocoa,Objective-c开发难点和问题
    关于 MRC 开发中的一些细节
    关于HTTP状态码的说明
    关于 MRC下自动释放池 的嵌套使用的几个问题
    C语言综合运用-------------编写 < 通讯录 >
    FFT与游戏开发(二)
    FFT与游戏开发(一)
    FFT开坑
  • 原文地址:https://www.cnblogs.com/losedMemory/p/6083605.html
Copyright © 2011-2022 走看看