抽象类和接口(我学习做的笔记供大家参考)

抽象类和接口(我学习做的笔记供大家参考)

抽象类,定义

接口 定义

两者的区别

—————————–

抽象类:

abstract关键字修饰

public abstract class Pet{//抽象类

    public abstract void toHospitol();//抽象方法

}

(1)抽象类不能不被实例

但是可以创建一个抽象类类型的引用变量

,这个引用变量指向非抽象的子类类型;

Pet dog=new Dog();

dog.toHospital();

(2)抽象方法没有方法体

抽象类中可以有非抽象的构造方法,创建子类的

实例时可以调用。

没有 抽象够着方法,没有抽象静态方法

怎么调用了?????

(1)如果父类中有静态方法(用static 修饰),子类也 有同名的静态方法,在调用的(静态绑定)

时候还是调用父类的静态方法。

(2)如果父类和子类中都有成名的成员变量,在调用的饿时候调用的是父类的成员变量(静态绑定)

(3)父类有构造方法。子类也有构造方法,先调用父类,在调用子类(静态绑定)

(4)java虚拟机动态绑定机制,在子类中重写了父类的方法后,

在调用这个方法的时候是调用子类重写后的方法

eg:public abstract class Base{

    public String var=”base1″;

    

    public Base(){System.out.println(“父类的构造方法”);}

    public static void method4(){

    System.out.println(“父类的静态方法method4”);

          }

    }

public class Sub1 extends Base{

    public String var=”base2″;

    public Sub1(){System.out.println(“子类的构造方法”);}

    public static void method4(){

        

    System.out.println(“子类的静态方法method4”);

        }

    }

public class Test{

    Base base=new Sub1();//先调用父类的,在调用子类的

    base.method4();//调用的是父类的

    System.out.println(base.var);//也是调用父类的

    }

—————————————

接口:

为什么使用接口?

在java中支持单根继承的。

问题:实现防盗门的功能

将门定义为抽象类,锁定义为接口,

防盗门继承们,实现 锁的 接口

接口:interface  叫做实现一个接口

is a 的关系  防盗门是一个门

has  a 的关系   防盗门有一个锁

上锁、开锁是一种能力,接口表示一种能力

定义Door抽象类:具有开、关门的功能

定义Lock接口:具有上锁、开锁

编写防盗门类,继承door 实现lock接口

/*

 * 门抽象类

 */

public abstract class Door {

    //开

    public abstract void open();

    //关

    public abstract void close();

}

public interface DoorBell {

//门铃,具有拍照的功能

    public abstract void takePhotos();

}

public interface Lock {

//锁

    public abstract void lockup();

    //开锁

    public abstract void lockopenI();

}

//防盗门

public class TheftproofDoor extends Door implements Lock, DoorBell {

    public void lockup() {

        System.out.println(“插进钥匙,向左转三圈,锁上了”);

    }

    public void lockopenI() {

        System.out.println(“插进钥匙,向右转三圈,锁开了”);

    }

    public void open() {

        System.out.println(“用力推,门开了”);

    }

    public void close() {

        System.out.println(“亲亲拉门,门关上了”);

    }

    public void takePhotos() {

        System.out.println(“主人不在家,拍照可存档!”);

    }

}

public class Test {

    /**

     * @param args

     */

    public static void main(String[] args) {

        TheftproofDoor myDoor=new TheftproofDoor();

        myDoor.close();

        myDoor.open();

        myDoor.lockopenI();

        myDoor.lockup();

        myDoor.takePhotos();

    }

}

一个人可以具有多项能力,

一个类可以实现多个接口

接口有比抽象类更好的特性:

可以被多个继承

设计和实现完全分离

更自然的使用多态

更容易搭建程序框架

更容易跟换实现

…………

接口是一种约定:有些接口只有名称

面向接口编程:程序设计面向接口的约定而不考虑具体实现

public interface MyInterface{

    //变量: 默认:public static final

    public void foo();//默认:public abstrct

    //其他方法

    }

public class MyClass extends Base implements MyInterface,MyInterface2{

     }

继承了Base类,实现了接口MyInterface和MyInterface2

接口中的方法就是抽象方法,可以不写abstract

,模认的就是public abstract

特征:

接口不可以被实例化

实现类必须实现接口的所有方法

实现类可以实现多个接口,用implements/多接口使用逗号隔开变量都是静态常量:public static final

用程序来描述usb接口:

分析:

可以使用java接口来实现:

编写usb接口

实现usb接口

使用接口(父类的引用指向子类对象,多态)

接口表示一种能力,体系在接口的方法上

面向接口编程:

关心实现类有和能力,而不关心实现细节

面向接口的约定二不考虑接口的具体实现

//定义了usb接口规范

public interface UsbInterface {

//提供usb服务

    public void service();

}

/*

 * U盘

 */

public class UDisk implements UsbInterface{

    public void service(){

        System.out.println(“U盘:连接usb接口传输数据”);

        

    }

}

/*

 * 风扇

 */

public class UFan implements UsbInterface {

    

    public void service() {

        System.out.println(“开始转动了”);

        

    }

}

public class Test {

public static void main(String[] args) {

    UsbInterface udisk=new UDisk();

    udisk.service();

    

    System.out.println(“******实现接口********”);

    UsbInterface ufan=new UFan();

    ufan.service();    

       }

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100823.html原文链接:https://javaforall.net

(0)
上一篇 2021年5月24日 下午3:00
下一篇 2021年5月24日 下午4:00


相关推荐

  • 人生就是一场康波「建议收藏」

    人生就是一场康波「建议收藏」理论创建人–周金涛2016年3月16日,中信建投首席经济学家周金涛先生参加由上海清算所等举办的第30期清算所沙龙——“2016年债务融资工具专题”活动。在沙龙活动中,周期天王周金涛先生阐述了康波经济周期理论对宏观经济走势的研判,以下是演讲实录。60年的经济周期:人生有三次财富机会重要经济周期理论开创者是两个,第一个康波周期,实际上它是全球经济运动的决定力量,也是在座各…

    2025年8月23日
    4
  • pycharm 批量替换_pycharm如何替换字符串

    pycharm 批量替换_pycharm如何替换字符串Pycharm中快速替换某个变量、某个字符可以使用Ctrl+R的快捷键来快速替换可以点击Replaceall来替换所有的匹配到的字符;如果要替换成空的,那么下面的输入框什么也不要输就可以。…

    2022年8月25日
    12
  • LLM系列:ChatGPT提示词精选与实操指南

    LLM系列:ChatGPT提示词精选与实操指南

    2026年3月16日
    2
  • 我的世界虚拟人生下载_我的世界虚拟人生手机版

    我的世界虚拟人生下载_我的世界虚拟人生手机版以下就是小编我为大家准备的一些资料,希望对大家有所帮助,我的世界虚拟人生mod可以让游戏中的村庄和村民变得像电脑游戏模拟人生那样,玩家可以在村庄里进行各种与现实生活类似的活动,并且还可以与村民进行更为复杂的互动,比如结婚生子、聊天交易等等。并且村民的外观也会变得更加生动,不再是原来的发出怪声的大鼻子村民了。虚拟人生mod玩法介绍:1、村民互动互动的选项有很多,但是不一定每个都成功。聊天、开玩笑、给…

    2025年5月25日
    4
  • Python学习笔记(28)-Python读取word文本「建议收藏」

    Python学习笔记(28)-Python读取word文本「建议收藏」一,简介Python可以利用python-docx模块处理word文档,处理方式是面向对象的。也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看做对象,对对象进行处理就是对word文档的内容处理。二,相关概念如果需要读取word文档中的文字(一般来说,程序也只需要认识word文档中的文字信息),需要先了解python-docx模块的几个概念。1,Document对象,

    2022年8月23日
    11
  • 计算机 无法 访问共享网络打印机,“无法连接到网络共享打印机”的常见原因和解决方法:…

    计算机 无法 访问共享网络打印机,“无法连接到网络共享打印机”的常见原因和解决方法:…无法连接到常见原因和治疗方法在许多情况下 LAN 中使用共享文件夹和打印机 但是在设置文件和打印共享后 您将遇到安全性不足的问题 我们可以采取许多措施来提高服务器和客户端的安全性 但是增强的安全性会给共享带来一些麻烦 以下是共享文件和打印时经常出现的问题 1 连接到网络共享打印机时 在 运行 输入框中输入打印服务器名称 并且无法连接 系统提示 找不到网络路径 这是由于本地计算机名称解析

    2026年3月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号