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

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

抽象类,定义

接口 定义

两者的区别

—————————–

抽象类:

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();    

       }

}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Android系统签名以及生成keystore秘钥

    Android系统签名以及生成keystore秘钥Android11系统签名以及keystore一、什么是系统签名Android下所有APP都要进行签名,而有些权限,只有系统签名了的APP可以拥有。而且需要在APP的AndroidManifest中添加以下IDandroid:sharedUserId=”android.uid.system”二、使用signapk.jar签名2.1找到对应文件(1)在根目录下创建keystore文件夹以方便工作(2)查找密钥和证书build/target/product/security/plat

  • win10下pytorch-gpu安装以及CUDA详细安装过程

    win10下pytorch-gpu安装以及CUDA详细安装过程win10下pytorch-gpu安装以及CUDA详细安装过程1.Cuda的下载安装及配置首先我们要确定本机是否有独立显卡。在计算机-管理-设备管理器-显示适配器中,查看是否有独立显卡。可以看到本机有一个集成显卡和独立显卡NVIDIAGetForceGTX1050。接下来,测试本机独立显…

  • 什么叫单页面开发_获取当前页面url

    什么叫单页面开发_获取当前页面url参考网址https://www.cnblogs.com/belongs-to-qinghua/p/11151054.htmlhttp://www.zhiliaotang.net/jishujiaoliu/web/965.html单页面开发:单页面开发常用于webapp开发和后台管理系统等单页面应用原理:我们通常所说的单页面应用程序通常是通过前端框架vue,react,angular…

    2022年10月13日
  • JSP Include 文件方式

    JSP Include 文件方式两种方式JSPinclude文件有两种方式:1. 使用include标签,像  2.使用jsp:include标签,像              使用的差异在于:方式1比较适合引入一些静态的,比较少改动的内容;比如网页的header和footer的部分。方式2比较适合于引入改动较多的页面。

  • 共享打印机无法连接打印,错误代码0x0000011b_打印机共享错误0x000001

    共享打印机无法连接打印,错误代码0x0000011b_打印机共享错误0x000001WIndows无法连接共享打印机,错误码:0x0000011bWin10电脑1直连的打印机,设备了共享。从另一个电脑2访问电脑1的共享打印机,连接提示错误0x0000011b,如下:经询问使用人,之前电脑2是可以正常连接到电脑1的共享打印机的,只是最近几天突然连接失败了。后得知电脑1最近有更新过系统补丁。经排查,通过卸载KB5005565补丁,重启电脑1后,电脑2成功连接到共享打印机,测试打印正常。处理过程:1.打开控制面板-程序-程序和功能-已安装更新。找到对应的KB5005565补丁,右

  • java stack deque_java如何实现栈

    java stack deque_java如何实现栈Java中的栈Stack、Deque、ArrayDeque、LinkedList的区别Stack类那么为什么我们不选择Stack呐?(两个主要原因)那么我们应该使用ArrayDeque还是LinkedList呐?总结Stack类Java中Stack类底层是数组实现的线程安全的栈。先进后出,常用操作是push/pop/peek而Deque是更加适用的双端队列接口,其通过ArrayDeque/LinkedList初始化实现Deque<Integer>stack=newArrayDeq

发表回复

您的电子邮箱地址不会被公开。

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