继承和接口
- 继承和接口 推荐度:
- 相关推荐
继承和接口
一、 继承
1. 继承的目的:创建一个新的类,新类复制了现有类的属性和方法并且增加自己本身的属性 和方法。
2. 实现继承
// 定义一个基本类作为父类
class Person {// 定义属性String name;int age;// 定义方法void eat() {System.out.println("吃东西!!!");}
}// 定义一个继承 Person 类的子类 Student 类
// 用到 extends 关键字
// 结构:class + 类名 + extends + 父类 {}
class Student extends Person {// 增加新的属性String Stu_id;// 增加新的方法void read() {System.out.println("看书!!!");}
}// 再次继承 Student 类
class UNStudent extends Student {// 增加新的属性int CET_4;// 增加新的方法void printInfo() {System.out.println("姓名:"+name);System.out.println("年龄:"+age);System.out.println("学号:"+Stu_id);System.out.println("CET_4:"+CET_4);}}
3. 继承的一些特性
用 extends 关键字可以使子类拥有父类的属性和方法,这些属性和方法不需要我们重新 写,这样提高了写代码的速度,我们只要写子类独有的属性和方法即可;子类是可以再次被 继承的,新的子类也拥有它的父类的所有属性和方法。
4. 继承的实际用法
class main {public static void main(String[] args) {// 创建一个UNStudent类型对象UNStudent unstudent1 = new UNStudent();// 对象名调用属性赋值unstudent1.name = "张三";unstudent1.age = 19;unstudent1.Stu_id = "19029300";unstudent1.CET_4 = 450;// unstudent1 是一个大学生类型对象unstudent1.printInfo();unstudent.printInfo();unstudent.read();unstudent.eat();// 身份转变为 学生类型 对象Student student = unstudent;student.read();// 身份转变为 人类类型 对象Person person = student;person.eat();// unstudent1 student person 都是同一个对象在不同身份类型下的代词}
}
二、 接口
1. 接口的用法
// 接口是一种类型 用 interface 定义
// 结构:interface + 接口名 {}
// 接口中的属性是常量,但是方法是抽象的,是没有方法体的。
interface Lock {// 方法是抽象的// 结构:返回值类型 + 方法名();void open();void close();
}// 用 implements 关键字使用接口
// class + 类命 + implements + 接口名 {}
// 在类中复制接口的抽象方法,实现方法的具体化
class FaceLock implements Lock {void open() {System.out.println("扫脸开锁");}void close() {System.out.println("扫脸关锁");}
}class KeyLock implements Lock {void open() {System.out.println("密钥开锁");}void close() {System.out.println("密钥关锁");}
}
2. 接口和类的转化
class Test {public static void main(String[] args) {// 创建一个 FaceLock 类型的对象FaceLock facelock = new FaceLock();facelock.open();facelock.close();// 创建一个 KeyLock 类型的对象KeyLock keylock = new KeyLock();keylock.open();keylock.close();// FaceLock类类型对象转化成 Lock 接口类型Lock lock1 = facelock;// lock1 调用facelock对象中重写的方法lock1.open();lock1.close();// KeyLock类类型对象转化成 Lock 接口类型Lock lock2 = keylock;// lock2 调用keylock对象中重写的方法lock2.open();lock2.close();}
}
3. 接口在实际中的应用
有一个 Door 类,Door 有开关门的方法,同时有两种方法开关门,即扫脸和密钥方法。如 果按照普通的写法,就需要写两种方法来表示两种开关门的方式。两种锁的类型分别作为两 种开关方法的参数类型。
class Door {void openDoor(FaceLock facelock) {facelock.open();System.out.println("门开了!!");}void openDoor(KeyLock keylock) {keylock.open();System.out.println("门开了");}void closeDoor(KeyLock keylock) {keylock.close();System.out.println("门关了");}void closeDoor(KeyLock keylock) {keylock.close();System.out.println("门关了");}
}
这样会有大量代码重复,显然很麻烦。因此,参考接口与类的转化,可以将父接口类型作为 参数类型,这样不管什么锁对象都可以作为参数传入。
class Door {void openDoor(Lock lock) {lock.open();System.out.println("门开了!!");}void closeDoor(Lock lock) {lock.close();System.out.println("门关了!!");}
}
接下来可以在实现中看看效果
public class main {public static void main(String[] args) {// 创建 Door FaceLock KeyLock 类型对象Door door1 = new Door();FaceLock facelock1 = new FaceLock();KeyLock keylock1 = new KeyLock();// 身份转化为 LockLock lock = facelock;// 用 FaceLock 类型 开门Door.open(facklock);// 用 KeyLock 类型 关门Door.close(keylock);// 用 Lock 类型 开门Door.openDoor(lock);}
}
运行结果如下图
最新文章
- 软件定义网络是否会终结命令行界面的命运
- 360进军搜索,全站推自主搜索引擎
- 传Facebook拟收购网络浏览器厂商Opera软件公司
- Dubbo之——Dubbo服务集群
- python数据写入csv、csv转excel、用Pandas把数据写入excel简单总结
- Java实现十种行为型模式
- Spring Messaging 远程代码执行漏洞分析(CVE
- 高并发部署策略 多副本服务+nginx均衡负载
- 【数字图像处理】图像的数学变换之傅里叶变换
- 1124
- 《2021年度中国计算机视觉人才调研报告》正式发布
- linux 杀毒软件查杀结果,Linux杀毒软件(ClamAV)
- 1个人做自媒体,就选这4个领域,变现容易,操作简单
- coloros系统和android系统,最流畅的安卓操作系统?国产两大系统对比,绿厂凭借细节取胜...
- RBAC权限设计
- linux getopt命令,Linux中getopt函数用法
- JScript.NET或者JScript是什么?