尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Java学习笔记--面向对象高级(接口)
1 初识接口1.1 接口的定义1.2 接口使用1.3 练习test1.Animalpackage com.itstudy.test1; public abstract class Animal { private String name; private String color; public Animal() { } public Animal(String name, String color) { this.name name; this.color color; } public String getName() { return name; } public void setName(String name) { this.name name; } public String getColor() { return color; } public void setColor(String color) { this.color color; } public abstract void eat(); }test1.AnimalAdapterpackage com.itstudy.test1; public class AnimalAdapter extends Animal { public AnimalAdapter() { } public AnimalAdapter(String name, String color) { super(name, color); } Override public void eat() { } }test1.Swim (interface)package com.itstudy.test1; public interface Swim { public abstract void swimming(); }test1.Dogpackage com.itstudy.test1; public class Dog extends AnimalAdapter implements Swim { public Dog() { } public Dog(String name, String color) { super(name, color); } Override public void eat() { System.out.println(狗吃骨头); } Override public void swimming() { System.out.println(狗正在狗刨); } }test1.Frogpackage com.itstudy.test1; public class Frog extends AnimalAdapter implements Swim { public Frog() { } public Frog(String name, String color) { super(name, color); } Override public void eat() { System.out.println(青蛙吃虫子); } Override public void swimming() { System.out.println(青蛙正在蛙泳); } }test1.Rabbitpackage com.itstudy.test1; public class Rabbit extends AnimalAdapter{ public Rabbit() { } public Rabbit(String name, String color) { super(name, color); } Override public void eat() { System.out.println(兔子吃胡萝卜); } }test1.Testpackage com.itstudy.test1; import com.itstudy.test2.Inter; public class Test { public static void main(String[] args) { /* 练习 编写带有接口和抽象类的标准 Javabean 类 青蛙 属性名字颜色 行为吃虫子蛙泳 狗 属性名字颜色 行为吃骨头狗刨 兔子 属性名字颜色 行为吃胡萝卜 */ //创建对象 Frog frog new Frog(青蛙, 绿色); System.out.println(frog.getName() frog.getColor()); frog.eat(); frog.swimming(); Dog dog new Dog(狗, 棕色); System.out.println(dog.getName() dog.getColor()); dog.eat(); dog.swimming(); Rabbit rabbit new Rabbit(兔子, 白色); System.out.println(rabbit.getName() rabbit.getColor()); rabbit.eat(); //rabbit.swimming();//兔子不能调用游泳接口因为没有实现Swim接口 } }2 接口中成员的特点 JDK7以前test2.Studentackage com.itstudy.test2; public class Student { String name; public void show(){ System.out.println(student); } }test2.Inter (interface)package com.itstudy.test2; public interface Inter { //成员变量只能是常量。默认修饰符public static final //规则某一些关键字是灰色的表示当前可以省略不写 public static final int A 10; //构造方法没有 //因为接口不能创建对象而且接口里面所有的成员变量都是常量已经有真实的数据了 // public Inter(){} //成员方法只能是抽象方法。默认修饰符public abstract }test2.Testpackage com.itstudy.test2; public class Test { public static void main(String[] args) { /* 接口中成员的特点 成员变量只能是常量。默认修饰符public static final 构造方法没有 成员方法只能是抽象方法。默认修饰符public abstract JDK7 以前接口中只能定义抽象方法 */ System.out.println(Inter.A);//能通过Inter.调用说明A前面一定有static修饰 } }找编译class文件如下图所示选择文件夹out\production\oop-interface\com\itstudy\test2通过javap 文件名 对此文件进行反编译由图中可知3 接口和类之间的关系3.1 概念test3.Personpackage com.itstudy.test3; public abstract class Person { private String name; private int age; public Person() { } 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 void show(){ System.out.println(name:name,age:age); } public abstract void aaa(); }test3.Inter1 (interface)package com.itstudy.test3; public interface Inter1 { public abstract void method1(); public abstract void method2(); public abstract void bbb(); }test3.Inter2 (interface)package com.itstudy.test3; public interface Inter2 { public abstract void function1(); public abstract void function2(); public abstract void bbb(); }test3.Interimplpackage com.itstudy.test3; public class Interimpl extends Person implements Inter1, Inter2 { //如果一个类实现了多个接口那么就要重写多个接口中所有的抽象方法 //注意点 // 1.如果父类Person也是一个抽象类的话那么在子类中需要把所有的抽象方法进行重写要么子类也是一个抽象类 // 2.如果多个接口中出现了重复的抽象方法此时我们只有重写一次就可以 Override public void method1() { } Override public void method2() { } Override public void bbb() { } Override public void function1() { } Override public void function2() { } Override public void aaa() { } }test3.MyInter(interface)package com.itstudy.test3; public interface MyInter extends Inter1, Inter2 { }test3.MyInterimplpackage com.itstudy.test3; public class MyInterimpl implements MyInter { /* 接口和接口的关系: 继承关系可以单继承也可以多继承 注意点 1.如果有一个接口A继承了多个接口此时相当于是把多个接口中的抽象方法全部继承下来了 在以后实现类实现接口A的时候就要把所有的抽象方法进行重写 */ Override public void method1() { } Override public void method2() { } Override public void function1() { } Override public void function2() { } Override public void bbb() { } }test3.Testpackage com.itstudy.test3; public class Test { public static void main(String[] args) { /* 类和类的关系: 继承关系只能单继承不能多继承但是可以多层继承 类和接口的关系: 实现关系可以单实现也可以多实现还可以在继承一个类的同时实现多个接口 注意点 1.如果父类Person也是一个抽象类的话那么在子类中需要把所有的抽象方法进行重写要么子类也是一个抽象类 2.如果多个接口中出现了重复的抽象方法此时我们只有重写一次就可以 接口和接口的关系: 继承关系可以单继承也可以多继承 注意点 1.如果有一个接口A继承了多个接口此时相当于是把多个接口中的抽象方法全部继承下来了 在以后实现类实现接口A的时候就要把所有的抽象方法进行重写 */ } }3.2 练习test4.Personpackage com.itstudy.test4; //因为现在我不想让外界去直接创建人的对象 //因为直接创建顶层父类人的对象没有意义 //所以我就把他写为抽象的不让外界去创建对象 public abstract class Person { private String name; private int age; public Person() { } 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; } }test4.Athlete -- 运动员package com.itstudy.test4; public abstract class Athlete extends Person{ public Athlete() { } public Athlete(String name, int age) { super(name, age); } public abstract void study(); }test4.coach -- 教练package com.itstudy.test4; public abstract class coach extends Person{ public coach() { } public coach(String name, int age) { super(name, age); } public abstract void teach(); }test4.Basketballathletepackage com.itstudy.test4; public class Basketballathlete extends Athlete{ public Basketballathlete() { } public Basketballathlete(String name, int age) { super(name, age); } Override public void study() { System.out.println(篮球运动员正在学打篮球); } }test4.Basketballcoachpackage com.itstudy.test4; public class Basketballcoach extends coach{ public Basketballcoach() { } public Basketballcoach(String name, int age) { super(name, age); } Override public void teach() { System.out.println(篮球教练正在教打篮球); } }test4.SpeskEnglish (interface)package com.itstudy.test4; public interface SpeskEnglish { void spekEnglish(); }test4.Tabletennisathletepackage com.itstudy.test4; public class Tabletennisathlete extends Athlete implements SpeskEnglish { public Tabletennisathlete() { } public Tabletennisathlete(String name, int age) { super(name, age); } Override public void study() { System.out.println(乒乓球运动员正在学打乒乓球); } Override public void spekEnglish() { System.out.println(乒乓球运动员正在说英语); } }test4.Tabletenniscoachpackage com.itstudy.test4; public class Tabletenniscoach extends coach implements SpeskEnglish { Override public void teach() { System.out.println(乒乓球教练正在教打乒乓球); } Override public void spekEnglish() { System.out.println(乒乓球教练正在说英语); } }test4.Testpackage com.itstudy.test4; public class Test { public static void main(String[] args) { /* 练习 编写带有接口和抽象类的标准 Javabean 类 我们现在有乒乓球运动员和篮球运动员乒乓球教练和篮球教练。 为了出国交流跟乒乓球相关的人员都需要学习英语。 请用所有知识分析在这个案例中哪些是具体类哪些是抽象类哪些是接口 乒乓球运动员// 姓名年龄学打乒乓球说英语 篮球运动员 姓名年龄学打篮球 乒乓球教练 姓名年龄教打乒乓球说英语 篮球教练 姓名年龄教打篮球 */ Tabletennisathlete taba new Tabletennisathlete(张三, 20); System.out.println(taba.getName() taba.getAge()); taba.study(); taba.spekEnglish(); } }4 接口的新特性4.1 新特性4.2 JDK8以后接口中新增的方法test5.InterApackage com.itstudy.test5; public interface InterA { public abstract void method1(); public abstract void method2(); //新增默认的方法 //public default 返回值类型 方法名(参数列表){方法体} public default void function(){ System.out.println(InterA接口中新增的默认方法~); } }test5.InterBpackage com.itstudy.test5; public interface InterB { public default void function(){ System.out.println(InterB接口中新增的默认方法~); } }test5.InterImplepackage com.itstudy.test5; public class InterImple implements InterA, InterB { Override public void method1() { System.out.println(实现类重写的method1方法~); } Override public void method2() { System.out.println(实现类重写的method2方法~); } Override public void function() { System.out.println(实现类重写了默认方法~); } }test5.Testpackage com.itstudy.test5; public class Test { public static void main(String[] args) { /* JDK8 以后接口中新增的方法 允许在接口中定义默认方法需要使用关键字 default 修饰 作用为了接口升级时代码不报错 接口中默认方法的定义格式 格式public default 返回值类型 方法名 (参数列表) { } 范例public default void show () {} 接口中默认方法的注意事项 1.默认方法不是抽象方法所以不强制被重写。但是如果被重写重写的时候去掉 default 关键字 2.public 可以省略default 不能省略 3.如果实现了多个接口多个接口中存在相同名字的默认方法子类就必须对该方法进行重写 */ //创建实现类的对象并调用默认方法 InterImple ii new InterImple(); ii.function(); } }输出结果实现类重写了默认方法~4.3 JDK9新增的私有方法Test7.Interpackage com.itstudy.test7; public interface Inter { public default void login(){ check(); System.out.println(执行登录的逻辑......); } public default void register(){ check(); System.out.println(执行注册的逻辑......); } //jdk8 /* public default void check(){ System.out.println(检查网络.......); System.out.println(检查用户名和密码的格式......); System.out.println(检查用户名是否存在......); }*/ //jdk9:新增了私有的方法 //私有方法其他类无法调用 //普通的私有方法private 返回值类型 方法名 (形参){方法体} //静态的私有方法private static 返回值类型 方法名 (形参){方法体} default void check(){ System.out.println(检查网络.......); System.out.println(检查用户名和密码的格式......); System.out.println(检查用户名是否存在......); } }Test7.InterImplpackage com.itstudy.test7; public class InterImpl implements Inter{ }Test7.Testpackage com.itstudy.test7; public class Test { public static void main(String[] args) { /* * JDK9 接口中的私有方法 * 第一种普通的私有方法 * 作用为了抽取默认方法中重复代码而出现的 * 格式private 返回值类型 方法名 (参数列表) { } * 范例 1private void show () {} * * 第二种静态的私有方法 * 作用为了抽取静态方法中重复代码而出现的 * 格式private static 返回值类型 方法名 (参数列表) { } * 范例 2private static void method () {} * * */ InterImpl interImpl new InterImpl(); interImpl.check(); } }4.4 小结
RELATED

相关推荐

一篇足够!python字符串索引、遍历、切片、各种字符串操作 详解

一篇足够!python字符串索引、遍历、切片、各种字符串操作 详解

本文涉及到了python中各种 字符串的操作流程,以便于为python初学者提供学习 目录 一、字符串索引与遍历 1.索引 2.遍历 二、字符串切片语法(核心) 标准格式 分类案例演示 三.字符串的操作 3.1查找 3.2转换大小写 3.3对齐方式 3.4开…

📅 2026/8/3 3:54:07
Gemini适合什么人用:3类高潜力用户+2类慎用人群,附实测ROI对比数据

Gemini适合什么人用:3类高潜力用户+2类慎用人群,附实测ROI对比数据

更多请点击: https://kaifayun.com 第一章:Gemini适合什么人用:3类高潜力用户2类慎用人群,附实测ROI对比数据 三类高潜力用户 AI原生开发者:频繁调用多模态API、需低延迟响应与结构化输出的工程师。实测在10万次/日…

📅 2026/8/2 19:49:44
2026智能制造亚洲EMBA择校测评榜单:民企老板避坑首选高性价比项目

2026智能制造亚洲EMBA择校测评榜单:民企老板避坑首选高性价比项目

【客观中立测评声明】本文为独立财经择校测评,无硬性广告植入,基于2026年最新院校公开数据、课程体系、校友真实反馈,聚焦实体民企、科创企业创始人择校需求,理性拆解各项目适配度与短板,仅供高管择校参考。深耕商科教…

📅 2026/9/10 8:34:36
MORE NEWS

更多资讯

📰

10款AI内容检测与优化工具实测推荐

1. 项目概述:AI内容检测与优化工具盘点在内容创作领域,AI生成内容(AIGC)的普及带来了效率革命,但同时也催生了内容同质化和识别难题。作为从业十年的内容策略顾问,我实测过上百款相关工具,今天精…

📰

基于Qwen2.5-1.5B和LoRA的心理健康对话助手开发实践

1. 项目背景与核心目标在心理健康服务需求日益增长的当下,基于大语言模型构建专业对话助手成为技术落地的热门方向。Qwen2.5-1.5B-Instruct作为通义千问团队开源的中等规模指令微调模型,其1.5B参数量在消费级GPU上具有可操作性,特别适合垂直领…

📰

如何高效整理零散技术想法并转化为项目

1. 项目概述作为一名从业多年的技术博主,我经常遇到一个困扰:当灵感来临时,常常会随手记录下一些零散的想法或项目标题,但事后回顾却发现这些"无标题"的片段难以串联成完整的思路。今天我想分享一个实用的方法&#xff…

📰

OpenCV高级GUI模块实战:窗口管理与交互设计

1. OpenCV高级GUI模块全景解析OpenCV的highgui模块是计算机视觉项目开发中不可或缺的交互界面基础组件。作为从业十余年的视觉算法工程师,我见证了这个模块从简单的图像显示功能逐步演变为支持复杂交互的GUI系统。不同于常规教程的碎片化讲解,本文将系统…

📰

职场会议过载的成因分析与高效会议管理策略

1. 会议泛滥的职场现状"今天又开了5个会,啥活都没干成"——这句话已经成为现代职场人的日常吐槽。根据某人力资源平台调研数据显示,中层管理者平均每周参会时间高达18小时,相当于两个完整工作日。更令人担忧的是,其中42…

📰

2026大数据运维行业趋势复盘:大数据运维工程师赋能发展

大数据运维目前情况如何,大数据运维工程师又能帮到你什么?过去很长一段时间里,大数据运维都被当成纯粹的后端支撑岗位。工作内容很固定:日常巡检、集群维护、故障兜底,基本都是出了问题再补救的 “救火模式”。也正因工…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬