JAVA.抽象、接口、内部类

1.抽象

共性,父类定义抽象方法,子类必须重写,或者子类也是抽象类

示例代码

animal

package animalabstract;//定义抽象类animal
public abstract class animal {String name;int age;//定义抽象方法eat,子类必须重写public abstract void eat();
}

rabbit

package animalabstract;public class rabbit extends animal{@Overridepublic void eat() {System.out.println("rabbit eat 胡萝卜");}
}

frog

package animalabstract;public class frog extends animal{@Overridepublic void eat() {System.out.println("frog eat 虫子");}
}

dog

package animalabstract;public class dog extends animal{@Overridepublic void eat() {System.out.println("dog eat 骨头");}
}

Test

package animalabstract;public class Test {public static void main(String[] args) {rabbit rb = new rabbit();rb.eat();frog fg = new frog();fg.eat();dog dog = new dog();dog.eat();}
}

抽象类里面可以有构造方法,比如

2.接口

示例代码

swim

package animalabstract;public interface swim {public void swim();
}

用上面抽象的示例代码,animal和rabbit不用改,但是dog类和frog类需要实现swim接口,需要改

dog

package animalabstract;public class dog extends animal implements swim{@Overridepublic void eat() {System.out.println("dog eat 骨头");}@Overridepublic void swim() {System.out.println("dog 狗刨");}
}

frog

package animalabstract;public class frog extends animal implements swim{@Overridepublic void eat() {System.out.println("frog eat 虫子");}@Overridepublic void swim() {System.out.println("frog 蛙泳");}
}

Test

package animalabstract;public class Test {public static void main(String[] args) {rabbit rb = new rabbit();rb.eat();frog fg = new frog();fg.eat();fg.swim();dog dog = new dog();dog.eat();dog.swim();}
}

成员变量

只能是常量,默认 public static final

构造方法

没有

成员方法

抽象方法等, public abstract

3.接口,类之间的关系

实现多个接口里面有重名的方法也没事,因为是抽象的,需要重写

示例代码

代码结构

package coachplayer;public abstract class person {String name;int age;public person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public abstract String info();
}
package coachplayer;public abstract class player extends person{public player(String name, int age) {super(name, age);}public abstract String info();public abstract void study();
}
package coachplayer;public abstract class coach extends person{public coach(String name, int age) {super(name, age);}public abstract String info();public abstract void teach();
}
package coachplayer;public class ppplayer extends player implements english {public ppplayer(String name, int age) {super(name, age);}@Overridepublic String info() {return this.name + " " + this.age ;}@Overridepublic void study() {System.out.println("乒乓球运动员学习打乒乓球");}@Overridepublic void english() {System.out.println("乒乓球运动员说英语");}
}
package coachplayer;public class bbplayer extends player{public bbplayer(String name, int age) {super(name, age);}@Overridepublic String info() {return this.name + " " + this.age ;}@Overridepublic void study() {System.out.println("篮球运动员打篮球");}
}
package coachplayer;public class ppcoach extends coach implements english{public ppcoach(String name, int age) {super(name, age);}@Overridepublic String info() {return this.name + " " + this.age ;}@Overridepublic void teach() {System.out.println("乒乓球教练教乒乓球");}@Overridepublic void english() {System.out.println("乒乓球教练说英语");}
}
package coachplayer;public class bbcoach extends coach {public bbcoach(String name, int age) {super(name, age);}@Overridepublic String info() {return this.name + " " + this.age ;}@Overridepublic void teach() {System.out.println("篮球教练教篮球");}
}
package coachplayer;public interface english {public void english();
}
package coachplayer;public class Test {public static void main(String[] args) {ppplayer ppl=new ppplayer("leo",18);ppl.study();ppl.english();System.out.println(ppl.info());bbplayer bbl=new bbplayer("jack",20);bbl.study();System.out.println(bbl.info());ppcoach ppc=new ppcoach("james",50);ppc.teach();ppc.english();System.out.println(ppc.info());bbcoach bbc=new bbcoach("amy",40);bbc.teach();System.out.println(bbc.info());}
}

4.接口特殊方法

default

在接口里定义  fun,默认  public abstract ,所以在实现这个接口的时候,就必须对该方法重写

package interface3tips;public interface inter0 {public abstract void fun();
}
package interface3tips;public class class1 implements inter0{@Overridepublic void fun() {System.out.println("class继承了inter0");}
}
package interface3tips;public class TEST {public static void main(String[] args) {class1 c1 = new class1();c1.fun();}
}

但是,把abstract改成default,实现这个接口的时候就不需要重写,因为他是默认的方法,你可以重写也可以不重写,然后可以直接使用

package interface3tips;public interface inter0 {public default void fun(){System.out.println("fun的default");}
}
package interface3tips;public class class1 implements inter0{}
package interface3tips;public class TEST {public static void main(String[] args) {class1 c1 = new class1();c1.fun();}
}

static

package interface3tips;public interface inter0 {public default void fun(){System.out.println("fun的default");}public static void show(){System.out.println("inter0的静态方法");}
}
package interface3tips;public class class1 implements inter0{}
package interface3tips;public class TEST {public static void main(String[] args) {class1 c1 = new class1();c1.fun();inter0.show();}
}

private

package interface3tips;public interface inter0 {public default void fun(){System.out.println("fun的default");fun1();}public static void show(){System.out.println("inter0的静态方法");}private void fun1(){System.out.println("私有方法,外类访问不到");}
}

package interface3tips;public class class1 implements inter0{}
package interface3tips;public class TEST {public static void main(String[] args) {class1 c1 = new class1();c1.fun();inter0.show();}
}

package interface3tips;public interface inter0 {public default void fun(){System.out.println("fun的default");fun1();}public static void show(){System.out.println("inter0的静态方法");fun2();}private void fun1(){System.out.println("私有方法,外类访问不到");}private static void fun2(){System.out.println("私有静态方法,外类访问不到");}
}
package interface3tips;public class class1 implements inter0{}
package interface3tips;public class TEST {public static void main(String[] args) {class1 c1 = new class1();c1.fun();inter0.show();}
}

5.适配器

  当接口inter0有很多个抽象方法,那么一个类class1继承的时候就必须重写所有的抽象方法,但我不想这样,所以先创建一个新的类作为适配器inter0Adapter,实现这个接口,然后再用类来继承这个适配器类  class1 extends interAdapter,这样我的class1类就不用重写inter0的所有抽象方法

package interface3tips;public interface inter0 {public abstract void fun1();public abstract void fun2();public abstract void fun3();public abstract void fun4();public abstract void fun5();}
package interface3tips;public abstract class inter0Adapter implements inter0{@Overridepublic void fun1() {System.out.println("适配器的fun1");}@Overridepublic void fun2() {System.out.println("适配器的fun2");}@Overridepublic void fun3() {System.out.println("适配器的fun3");}@Overridepublic void fun4() {System.out.println("适配器的fun4");}@Overridepublic void fun5() {System.out.println("适配器的fun5");}
}
package interface3tips;public class class1 extends inter0Adapter{@Overridepublic void fun5(){System.out.println("只用到fun5");}}
package interface3tips;public class TEST {public static void main(String[] args) {class1 c1 = new class1();c1.fun1();c1.fun5();}
}

6.内部类

1.成员内部类

package Inclass;public class Outer{String name;Iner I1;public Outer(String name) {this.name = name;}public Outer() {}class Iner{int age;public Iner() {}public Iner(int age) {this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Iner{" +"age=" + age +'}';}}public Iner getI1() {if (I1 == null) {I1 = new Iner(0); // 默认年龄为 0}return I1;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Outer{" +"name='" + name + '\'' +", I1=" + I1.toString() +'}';}public void setI1(Iner i1) {I1 = i1;}}

package Inclass;public class Test {public static void main(String[] args) {// 方法1,直接创建Outer Outer1=new Outer("jack");Outer.Iner Iner1=Outer1.new Iner(18);Outer1.setI1(Iner1);System.out.println(Outer1);// 方法2,外部类编写方法返回内部类n对象Outer Outer2=new Outer("james");Outer.Iner Iner2=Outer2.getI1();Iner2.setAge(20);System.out.println(Outer2);}
}

2.静态内部类

3.局部内部类

4.匿名内部类

匿名内部类是一个对象来的,只是没有名字,只用一次,就不用在创建一个类了

package Inclass;public abstract class Outer{String name;public Outer(String name) {this.name = name;}public Outer() {}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Outer{" +"name='" + name + '\'' +'}';}public abstract void show();}
package Inclass;public class Test {public static void main(String[] args) {new Outer() {public  void show () {System.out.println("我是匿名内部类");}}.show();}
}

也可以创建一个对象接收,然后再用

package Inclass;public class Test {public static void main(String[] args) {Outer o1= new Outer() {public  void show () {System.out.println("我是匿名内部类");}};o1.show();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java给定一些元素随机从中选择一个

文章目录 代码实现java.util.Random类实现随机取数(推荐)java.util.Collections实现(推荐)Java 8 Stream流实现(不推荐) 完整代码参考(含测试数据) 在Java中,要从给定的数据集合中随机选择一个元素,我们很容易想到可以使用 java.…

Redis快速入门(一)

一、初识Redis 1、认识NoSQL NoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库。   a)结构化与非结构化   传统关系型数据库是结构化数据,每一张…

【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件

目录 ​编辑 前言 系统调用 open 参数flags 参数mode write 追加方式 read close 文件描述符 打开多个文件并观察其文件描述符 C语言文件操作 理解一切皆文件 理解open操作 前言 各类语言的文件操作其实是对系统调用的封装 我们经常说,创建一个文件&a…

力扣第三十七题——解数独

内容介绍 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 数独…

每天一个数据分析题(四百四十四)- 数据仓库

企业数据仓库里面的数据一般是由业务数据经过ETL技术处理后来的,以下关于ETL的说法错误的是 A. ETL过程中的主要环节是数据抽取、数据转换和加工、数据流转 B. 增量数据抽取过程中,提取增量数据的方法有通过时间戳、建立触发器、全表比对、日志比对等 …

springboot整合pgsql

demo代码说明 springboot使用mybatis-plus整合pgsql 在springboot项目中使用pgsql,使用了mybatis-plus、druid 代码见 spring-demo: springboot 结合各种插件 demo 注意事项: 版本兼容 正常springboot使用,但是注意需要添加pgsql正确版…

CVE-2024-39700 (CVSS 9.9):JupyterLab 模板中存在严重漏洞

在广泛使用的 JupyterLab 扩展模板中发现了一个严重漏洞,编号为CVE-2024-39700 。此漏洞可能使攻击者能够在受影响的系统上远程执行代码,从而可能导致大范围入侵和数据泄露。 该漏洞源于在扩展创建过程中选择“测试”选项时自动生成“update-integratio…

VIM基础配置

1. CTAGS配置 下载 上传虚拟机,解压,进入目录 tar -xzvf ctags-5.8.tar.gz cd ctags-5.8/编译 ./configure sudo make sudo make install查看是否安装成功 ctags --version打印如下 2. 使用Vundle 下载 git clone https://github.com/VundleVim/Vund…

Linux并发程序设计(3):守护进程

目录 前言 一、介绍 1.1 概念 1.2 特点 1.3 举例 二、系统编程 2.1 setsid函数 2.2 getpid函数 2.3 getsid函数 2.4 getpgid函数 2.5 chdir函数 三、代码例程 3.1 使子进程在后台运行 3.2 使子进程脱离原终端 3.3 更换目录,并设定权限(非…

React--Redux

Redux 是一个用于 JavaScript 应用的状态管理库,特别是在 React 应用中非常流行。下面我将详细介绍一个使用 Redux 的简单案例,包括设置 Redux 环境、创建 store、定义 actions 和 reducers,以及如何连接 React 组件。 步骤 1: 安装依赖 首…

基于STM32通过云平台实现智慧大棚【手机远程查看温湿度】【报警】

文章目录 一、成果演示二、所用到的模块三、实现的功能四、接线说明五、WIFI模块配置步骤5.1云平台介绍5.2云平台使用5.3使用USB转TTL测试联通云平台 六、STM32代码编写七、手机上查看数据6.1下载软件(仅限安卓手机)6.2操作 一、成果演示 STM32通过物联网…

String、StringBuffer和StringBuilder

一、String类 1. String类的理解 2. String类结构 1. String类实现了Serializable接口,说明String对象可以串行化,即可以在网络上传输 2. String类实现了Comparable接口,说明String对象可以比较 String底层是一个字符数组,这个数组里存的是字符串的内容 例如:…

005 仿muduo实现高性能服务器组件_通信连接管理

​🌈个人主页:Fan_558 🔥 系列专栏:仿muduo 📒代码仓库: 项目代码 🌹关注我💪🏻带你学更多知识 文章目录 前言Channel模块设计原因整体设计代码如下 Connection模块设计原…

Florence2:Advancing a unified representation for a variety of vision tasks

Florence-2模型:开启统一视觉基础模型的新篇章_florence -2-CSDN博客文章浏览阅读1.1k次,点赞108次,收藏109次。Florence-2是由微软Azure AI团队开发的一款多功能、统一的视觉模型。它通过统一的提示处理不同的视觉任务,表现出色且优于许多大型模型。Florence-2的设计理念是…

用Postman Flows打造你的专属API:外部公开,轻松上手!

引言 Postman Flows 是一个使用 GUI 进行无代码 API 调用流程创建的服务。这篇文章我尝试使用 Flows 来构建将 Momento Topic 中的数据保存到 TiDB 的保存 API,因此想分享一些使用过程中的技巧等。 实现内容 将从 Momento Topics 配发的 JSON 数据保存到 TiDB 中。…

3086. 拾起 K 个 1 需要的最少行动次数

3086. 拾起 K 个 1 需要的最少行动次数 题目链接:3086. 拾起 K 个 1 需要的最少行动次数 代码如下: //参考链接:https://leetcode.cn/problems/minimum-moves-to-pick-k-ones/solutions/2692009/zhong-wei-shu-tan-xin-by-endlesscheng-h972 class Sol…

CrowdStrike引发全球微软系统大宕机:事故解析及网络安全反思

引言 近日,一次由CrowdStrike推送的更新引发了全球IT系统大规模故障。超过850万台电脑受到影响,涵盖各个行业和领域,引发了广泛关注和讨论。本文将详细解析此次事件的来龙去脉,评估其影响,并探讨网络安全的现状及未来…

C++ 栈( stack )学习

目录 1.栈 2.模拟栈 1.1.入栈( push ) 1.2.出栈( pop ) 1.3.获取栈顶元素( top ) 3.直接使用栈( stack ) 3.1.导入头文件并创建栈 3.2.栈的操作 3.2.1.入栈( push ) 3.2.2.出栈( pop ) 3.2.3.获取栈顶元素( top ) 3.2.4.获取栈中元素个数( size ) 3.2.5.判断栈是否…

代码随想录算法训练营day8 | 344.反转字符串、541.反转字符串 II、卡码网:54.替换数字

文章目录 344.反转字符串思路 541.反转字符串 II思路 卡码网:54.替换数字思路复习:字符串 vs 数组 总结 今天是字符串专题的第一天,主要是一些基础的题目 344.反转字符串 建议: 本题是字符串基础题目,就是考察 revers…

ChatGPT:宽列数据库是什么?

ChatGPT:宽列数据库是什么? 宽列数据库(Wide-Column Store)是一种 NoSQL 数据库,它的设计灵感来自于 Google 的 Bigtable。宽列数据库适用于处理大规模的分布式数据存储,特别是在需要高性能读写、灵活的数据…