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://xiahunao.cn/news/3267907.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

OceanBase v4.2 特性解析:如何实现表级恢复

背景 在某些情况下,你可能会因为误操作而遇到表数据损坏或误删表的情况。为了能在事后将表数据恢复到某个特定时间点,在OceanBase尚未有表级恢复功能之前,你需要进行以下步骤: 利用OceanBase提供的物理恢复工具,您可…

昇思25天学习打卡营第23天|CV-ResNet50迁移学习

打卡 目录 打卡 迁移学习 实战练习 数据准备 数据处理 数据处理函数 数据处理流程 数据可视化 训练模型 构建Resnet50网络 固定特征进行训练 network 的输出 训练和评估 可视化模型预测 掌握迁移学习的重点在于,了解你的模型结构,通过冻结…

若依框架 : 生成代码

6.生成代码 6.1.配置生成设置 ruoyi-generator -> src -> main -> resources -> generator.yml 由于 案例中 表都有 前缀 为 tta_ , 这里设置去掉 6.2.生成代码 6.2.1.导入数据库中的表 6.2.2.修改设置 6.2.2.1.设置生成信息 点击 编辑 -> 生成信息 特别…

嵌入式Linux学习: 设备树实验

设备树(DeviceTree)是一种硬件描述机制,用于在嵌入式系统和操作系统中描述硬件设备的特性、连接关系和配置信息。它提供了一种与平台无关的方式来描述硬件,使得内核与硬件之间的耦合度降低,提高了系统的可移植性和可维…

乡下人的悲歌-感悟

这是一个最好的时代,也是一个最。。。的时代 前言 最近《乡下人的悲歌》一书在朋友圈火了,作为一个喜欢探究,观察生活的人,我想去探究这本书为什么突然爆火,以及作者给我们传达的什么观点,分享了那些&#…

Spring MVC 应用分层

1. 类名使⽤⼤驼峰⻛格,但以下情形例外:DO/BO/DTO/VO/AO 2. ⽅法名、参数名、成员变量、局部变量统⼀使⽤⼩驼峰⻛格 3. 包名统⼀使⽤⼩写,点分隔符之间有且仅有⼀个⾃然语义的英语单词. 常⻅命名命名⻛格介绍 ⼤驼峰: 所有单词⾸字⺟…

笔试编程算法题笔记(三 C++代码)

1.kotori和n皇后 题意简单来说就是,在一个无穷大的棋盘上,不断插入k个皇后,皇后们如果在 同一行,同一列,在一个45主对角线 在一个135副对角线上,就可以互相攻击。 我们需要判断在第i个皇后插入后&#xff…

【STM32本科毕业设计】基于STM32的多功能MP3播放器设计

目录 一. 概述二. 系统硬件设计2.1 整体设计思路2.2 硬件器件的选择2.2.1 MP3解码芯片选择 2.2.2 收音机芯片选择2.2.3 温度传感器选择2.2.4 彩灯驱动芯片选择2.2.5 音效处理芯片选择2.2.6 EEPROM芯片选择2.2.7 功率放大芯片选择2.2.8 电源芯片选择2.2.9 人机交互设备选择 2.3 …

map_set(红黑树封装)

1.map和set的整体大致架构 1.map和set的整体 平时我们使用map和set时,头文件是map和set的头文件 set头文件: map头文件 而stl_tree.h代表的就是红黑树 1.2 map和set的大致架构 map和set在源代码基本结构 map的大致特点: set的大致特点&am…

Linux gcc/g++ _ make/makefile

文章目录 库gcc/g程序编译过程链接动态链接静态链接 make _ makefile 库 一、 什么是库? 库是程序代码的集合,是共享程序代码的一种方式。根据源代码的公开情况,库可以分为两种类型: 开源库,公开源代码,能…

SPICE | 常见电路SPICE模型总结

Ref. 1. CMOS VLSI Design: A Circuits and Systems Perspective 目录 0 基础 1 反相器 inverter 2 缓存器 buffer 3 NAND 4 NOR 5 传输门 Transmission gate 6 三态反相器 Tristate Inverter 7 选择器 Multiplexers 8 D锁存器 D Latch 9 D触发器 D Flip-Flop 0 基础…

数模·微分方程

微分方程 核心概念 含导数的方程或方程组 通解和特解的区别:有初值条件的通解称作特解 解析解和数值解的:解析解是通过代数或解析方法得到的精确解。它通常以闭式表达式或公式的形式存在;数值解是通过数值方法(如迭代算法&#x…

了解Java虚拟机(JVM)

前言👀~ 上一章我们介绍网络原理相关的知识点,今天我们浅浅来了解一下java虚拟机JVM JVM( Java Virtual Machine ) JVM内存区域划分 方法区/元数据区(线程共享) 堆(线程共享) 虚…

数据结构——二叉树性质

性质1:在二叉树的第i层上至多有2^(i-1)个结点(i>1)。 这个性质很好记忆,观察一下图6-5-5。 第一层是根结点,只有一个,所以2^(1-1)2^01。 第二层有两个,2^(2-1)22。 第三层有四个,2^(3-1)2^24。 第四层有八个&am…

土地规划与水资源管理:和谐共生,共绘绿色发展的生态蓝图

在快速城市化与气候变化的双重挑战下,土地规划与水资源管理的协同成为了确保可持续发展的关键。本文旨在深入探讨如何将水资源管理融入土地规划的各个环节,以实现资源高效利用与环境的和谐共生。 一、水资源的现状与挑战 全球水资源分布不均&#xff0…

react-native从入门到实战系列教程一环境安装篇

充分阅读官网的环境配置指南,严格按照他的指导作业,不然你一直只能在web或沙箱环境下玩玩 极快的网络和科学上网,必备其中的一个较好的心理忍受能力,因为上面一点就可以让你放弃坚持不懈,努力尝试 成功效果 三大件 …

AI绘画;喂饭进阶!教你如何用Stable Diffusion生成高清建筑手工模型图,一篇文章搞懂什么是Lora模型和CKPT主模型!

前言 刚接触Stable Diffusion不久的你,是否有这样的疑问: Q1: Stable Diffusion中的主模型CKPT是什么? Q2: Stable Diffusion中的Lora模型又是什么? Q3: 在哪儿可以下载好用的AI绘图模型? Q4: Stable Diffusion 如…

Linux---01---安装VMware

一. 什么时Linux Linux 是一个开源的类 Unix 操作系统,Linux 是许多计算机硬件的底层操作系统,特别是服务器、嵌入式系统和个人电脑。它支持多种架构,包括 x86、x64、ARM 和 MIPS 等。Linux 因其稳定性、安全性、开源性以及广泛的社区支持而广受欢迎。 …

【Linux】文件系统|CHS寻址|LBA逻辑块|文件索引|inode|Date block|inodeBitmap|blockBitmap

前言 一个进程通过文件描述符标识一个打开的文件,进程拿着文件描述符可以在内核中找到目标文件进行读写等操作。这是打开的文件,而没有被打开的文件存储在磁盘中,是如何管理的?操作系统在偌大的磁盘中如何找到想要的文件并打开的…

【有哪些GPU算力租用平台值得推荐】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…