java基础之接口(抽象类与接口的区别)_练和运动员案例: 乒乓球运动员和篮球运动员; 乒乓球教练和篮球教练;

本文探讨了Java中的类与类、类与接口、接口与接口之间的关系,包括继承、实现、抽象方法和接口扩展功能。通过实例分析猫狗、老师学生以及教练运动员的场景,展示了如何使用抽象类和接口来组织代码结构.

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    //i.num2 = 200;
    //System.out.println(i.num); //无法为最终变量num分配值
    //System.out.println(i.num2);//无法为最终变量num2分配值
    System.out.println(Inter.num);
    System.out.println(Inter.num2);
    System.out.println("--------------");
}

}


**3、类与类,类与接口以及接口与接口的关系**



类与类:
继承关系,只能单继承,可以多层继承。
类与接口:
实现关系,可以单实现,也可以多实现。
并且还可以在继承一个类的同时实现多个接口。
接口与接口:
继承关系,可以单继承,也可以多继承。



interface Father {
public abstract void show();
}

interface Mother {
public abstract void show2();
}

interface Sister extends Father,Mother {

}

//class Son implements Father,Mother //多实现
class Son extends Object implements Father,Mother {
public void show() {
System.out.println(“show son”);
}

public void show2() {
    System.out.println("show2 son");
}

}

class InterfaceDemo3 {
public static void main(String[] args) {
//创建对象
Father f = new Son();
f.show();
//f.show2(); //报错

    Mother m = new Son();
    //m.show(); //报错
    m.show2();
}

}


**4、猫狗案例**



/*
加入跳高的额外功能

分析:从具体到抽象
猫:
姓名,年龄
吃饭,睡觉
狗:
姓名,年龄
吃饭,睡觉

由于有共性功能,所以,我们抽取出一个父类:
动物:
    姓名,年龄
    吃饭();
    睡觉(){}

猫:继承自动物
狗:继承自动物

跳高的额外功能是一个新的扩展功能,所以我们要定义一个接口
接口:
    跳高

部分猫:实现跳高
部分狗:实现跳高

实现;
从抽象到具体

使用:
使用具体类
*/



//定义跳高接口
interface Jumpping {
//跳高功能
public abstract void jump();
}

//定义抽象类
abstract class Animal {
//姓名
private String name;
//年龄
private int age;

public Animal() {}

public Animal(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 void eat();

//睡觉(){}
public void sleep() {
    System.out.println("睡觉觉了");
}

}

//具体猫类
class Cat extends Animal {
public Cat(){}

public Cat(String name,int age) {
    super(name,age);
}

public void eat() {
    System.out.println("猫吃鱼");
}

}

//具体狗类
class Dog extends Animal {
public Dog(){}

public Dog(String name,int age) {
    super(name,age);
}

public void eat() {
    System.out.println("狗吃肉");
}

}

//有跳高功能的猫
class JumpCat extends Cat implements Jumpping {
public JumpCat() {}

public JumpCat(String name,int age) {
    super(name,age);
}

public void jump() {
    System.out.println("跳高猫");
}

}

//有跳高功能的狗
class JumpDog extends Dog implements Jumpping {
public JumpDog() {}

public JumpDog(String name,int age) {
    super(name,age);
}

public void jump() {
    System.out.println("跳高狗");
}

}

class InterfaceTest {
public static void main(String[] args) {
//定义跳高猫并测试
JumpCat jc = new JumpCat();
jc.setName(“哆啦A梦”);
jc.setAge(3);
System.out.println(jc.getName()+“—”+jc.getAge());
jc.eat();
jc.sleep();
jc.jump();
System.out.println(“-----------------”);

    JumpCat jc2 = new JumpCat("加菲猫",2);
    System.out.println(jc2.getName()+"---"+jc2.getAge());
    jc2.eat();
    jc2.sleep();
    jc2.jump();

    //定义跳高狗并进行测试的事情自己完成。
}

}


**5、老师和学生案例**



/*
加入抽烟的额外功能

分析:从具体到抽象
老师:姓名,年龄,吃饭,睡觉
学生:姓名,年龄,吃饭,睡觉

由于有共性功能,我们提取出一个父类,人类。

人类:
    姓名,年龄
    吃饭();
    睡觉(){}

抽烟的额外功能不是人或者老师,或者学生一开始就应该具备的,所以,我们把它定义为接口

抽烟接口。

部分老师抽烟:实现抽烟接口
部分学生抽烟:实现抽烟接口

实现:从抽象到具体

使用:具体



*/
//定义抽烟接口
interface Smoking {
//抽烟的抽象方法
public abstract void smoke();
}

//定义抽象人类
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 abstract void eat();

//睡觉(){}
public void sleep() {
    System.out.println("睡觉觉了");
}

}

//具体老师类
class Teacher extends Person {
public Teacher() {}

public Teacher(String name,int age) {
    super(name,age);
}

public void eat() {
    System.out.println("吃大白菜");
}

}

//具体学生类
class Student extends Person {
public Student() {}

public Student(String name,int age) {
    super(name,age);
}

public void eat() {
    System.out.println("吃红烧肉");
}

}

//抽烟的老师
class SmokingTeacher extends Teacher implements Smoking {
public SmokingTeacher() {}

public SmokingTeacher(String name,int age) {
    super(name,age);
}

public void smoke() {
    System.out.println("抽烟的老师");
}

}

//抽烟的学生
class SmokingStudent extends Student implements Smoking {
public SmokingStudent() {}

public SmokingStudent(String name,int age) {
    super(name,age);
}

public void smoke() {
    System.out.println("抽烟的学生");
}

}

class InterfaceTest2 {
public static void main(String[] args) {
//测试学生
SmokingStudent ss = new SmokingStudent();
ss.setName(“林青霞”);
ss.setAge(27);
System.out.println(ss.getName()+“—”+ss.getAge());
ss.eat();
ss.sleep();
ss.smoke();
System.out.println(“-------------------”);

    SmokingStudent ss2 = new SmokingStudent("刘意",30);
    System.out.println(ss2.getName()+"---"+ss2.getAge());
    ss2.eat();
    ss2.sleep();
    ss2.smoke();

    //测试老师留给自己练习
}

}


**6、抽象类和接口的区别:**



A:成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象

B:关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承

C:设计理念区别
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。


**7、综合小练习**



    教练和运动员案例
    乒乓球运动员和篮球运动员。
    乒乓球教练和篮球教练。
    为了出国交流,跟乒乓球相关的人员都需要学习英语。
    请用所学知识:
    分析,这个案例中有哪些抽象类,哪些接口,哪些具体类

![运动员和教练案例分析](https://img-blog.youkuaiyun.com/20150920155948650)



/*
教练和运动员案例(学生分析然后讲解)
乒乓球运动员和篮球运动员。
乒乓球教练和篮球教练。
为了出国交流,跟乒乓球相关的人员都需要学习英语。
请用所学知识:
分析,这个案例中有哪些抽象类,哪些接口,哪些具体类。

整个分析过程,我是通过画图讲解的。
*/
//定义一个说英语的接口
interface SpeakEnglish {
//说英语
public abstract void speak();
}

//定义人的抽象类
abstract class Person {
private String name;
private int age;

public Person() {}

总结

面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。

还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。

万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

前端面试题汇总

JavaScript

前端资料汇总

 软件使用说明: 1,请以管理员身份运行本软件并关闭防火墙杀毒软件,软件会尝试将路由器与电脑连接的网卡以外的所有连接都禁用以免软件识别错误ip导致机,当然也有可能软件会禁用失败,建议你自己手动禁用,完机在启用,. 2,斐讯k1,k1s,k2全自动方案为全自动模式[适用于目前斐讯k1,k1s,k2出的所有固件版本] 小米路由方案需要你开启ssh权限才能使用  通用方案需要你自己开启路由器telnet或ssh然后设置路由器telnet或ssh地址密码,剩下的交给软件去完成. 3,默认r928的breed版本[软件包含所有版本的breed文件,离线] 4,不需要使用环境再安装telnet组件.也不需要设置输法. 5,特别说明,breed的时候请确定自己的路由器型号及可breed版本,以免成砖. 6,如果提示登录telnet或ssh失败而你又确定路由器telnet或ssh服务是开启的,请关闭软件重试 提供路由器免拆机开telnet及ssh方法邮件发送格式:目前全自动就k1一个方案,欢迎提供各种路由器免拆机开telnet及ssh方法,直接发我邮箱:306716509@qq.com,我有时间会集成到软件中. 路由器型号及版本: 默认telnet或ssh用户名及密码: 默认telnet或ssh ip地址: 可breed版本: 免拆机开启telnet或ssh服务方法: 2.5版本更新日志: 添加支持k2-v22.3.15.128版本,添加机完成后关闭telnet服务[仅针对v22.3.15.128版本,其他版本请勿勾选此功能否则可能会出现未知问题],添加ssh手选方案,注意不支持v21.4.6.12版本[此版本删除wget与tftp程序无法机,只能降级v21.4.6.10以下或升级成v22.3.15.128版本才可],特别注意事项,假如你先使用路由器breed助手在同一台电脑上过v22.3.15.128版本固件,在老版本可能需要重启电脑或清除ie浏览器缓存才行。 2.6版本更新日志: 修改k1,k1s,k2新版本使用升级开启ssh官方测试固件v21.99.99.99机方案支持v22.3.15到v22.4.2.9版本固件。添加启动程序先清除浏览器缓存。 原文件md5校验值:建议大家下载文件后使用hash_1.0.4校验一下路由器breed Web控制台通用版.exe文件是否跟微信:huzibbs-it 上面的路由器breed助手文章里面的md5值是否一致,如果不一致建议不要使用,可能会被注了病毒及盗号类木马程序 File: 路由器breed Web控制台通用版v2.6.exe Size: 786432 bytes File Version: 2.06 Modified: 2016年8月24日, 23:27:06 MD5: 54E501385EE96F3C34D137111361A397 SHA1: 9932E3C55865CFBF46781ED3401385269F4A8421 CRC32: BD2A4DC2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值