目录
一、抽象
- 抽象 abstract
在代码中,主要指的是抽象类,是指将类变抽象,如何抽象? 主要是将方法变抽象方法
1.1 抽象类语法
- 抽象类需要有abstract修饰
- 抽象类中可以有抽象方法,也可以没有抽象方法,也可以有正常方法
- 但是有抽象方法的类的一定是抽象类
- 抽象方法是需要加abstract,且不能写方法体
- 抽象类中可以有构造方法,但是不能通过new调用创建对象
- 抽象类主要用来被子类继承的
- 子类要么 将子类也变成抽象类
- 要么 就实现(重写)父类抽象方法
父类
public abstract class Animal {
int age;
// 抽象方法没有方法体
public abstract void eat();
// 普通方法
public void move(){
System.out.println("动物移动" );
}
// 可以有构造方法
public Animal(){
System.out.println("Animal()" );
}
}
子类
public class Dog extends Animal{ // 继承抽象类
// 子类构造方法
public Dog() {
System.out.println("Dog()" );
}
// 重写抽象方法
@Override
public void eat() {
System.out.println("狗吃骨头" );
}
}
测试
public class TestAbstract {
public static void main(String[] args) {
// 抽象类不能通过new创建对象
// new Animal()
// 创建子类对象时,发现会调用抽象父类构造方法执行,即创建父类对象
Dog dog = new Dog( );
dog.eat();
}
}
1.2 抽象类的作用
- 作用1: 主要是让子类继承
- 作用2: 抽象类虽然不能创建对象,但是当做父类引用指向子类对象,即在多态中使用
// 父抽象类当做引用 指向 子类对象
Animal animal = new Dog();
animal.eat();
1.3 深入理解
-
发现不要抽象类也可以完成这些题,改成抽象类,也可以完成对应的效果!!
-
那么,到底为什么需要设计成抽象呢?
- 原因: 设计成抽象类,使用时就会有语法限制,继承抽象类必须强制重写抽象方法,更好满足多态
1.4 该如何用
将来我们编程时,关于抽象该怎么办?
- 一方面: 你去用别人的抽象类
- 抽象类无法创建对象,想要用,就得继承抽象类
- 重写抽象方法
- 像多态一样,使用它就可以
- 一方面: 你要不要设计成抽象类?
- 要不要将类设计成抽象,参考下面这句话
抽象差异化,具体共同点
- 当你在设计程序时,如果发现很多类中有相同的重复的方法,就可以将方法抽取到父类,子类继承后可以直接使用
- 所谓"具体共同点",大家都共同需要使用一样的方法,那么就将该方法具体编写好,放在父类,子类继承后可以直接使用
- 当你在设计程序时,如果发现很多类中有相同的方法签名,但是运行效果却不一样,就可以将方法抽取到父类,设计成抽象方法,子类继承后,就会重写该方法
- 所谓"抽象差异化",子类中方法签名一样,执行不一样的方法,将这个设计成抽象方法
- 要不要将类设计成抽象,参考下面这句话
二、接口
2.1 语法介绍
java数据类型:
- 基本类型
- 引用类型: 数组,类,接口
接口不是类
接口是一种特殊的java文件,比抽象类还抽象…
接口的属性特征
接口的方法特征
/*
* 1.接口不是类,不使用class修饰,而使用interface
* 2.接口中没有属性/变量,所有属性都是公开的静态常量
* 即默认都被 public static final修饰
* 3.接口中没有正常方法,所有方法都是抽象的
* 默认都被public abstract修饰
* 4.接口中没有构造方法,不能创建对象
*/
public interface USB {
public final static double Length = 1;
public abstract void chuanshu() ;
}
接口主要是用来让子类实现(implements)的,并且可以实现多个接口
接口可以继承接口,并且可以多继承,但是不要和类搞混,类只能单继承!!!
/**
*
* @desc 1 子类实现接口要么子类变抽象类,要么就要重写(实现)全部抽象方法
* 2 类可以实现多个接口
* 3 类可以继承类的同时再去实现接口
*/
public class UDisk extends Electronic implements USB , Disk {
}
接口语法总结:
- 接口不是类,使用interface
- 接口中没有变量,默认都是静态常量
- 接口中没有正常方法,默认都是抽象方法
- 接口中没有构造方法,不能创建
- 接口可以继承接口,且允许多继承
子类实现接口
- 子类可以实现多个接口
- 实现接口就必须重写所有的抽象方法,否则子类变为抽象类
- 子类可以在继承的同时去实现接口
2.2 使用技巧
- 接口主要是被子类实现,可以当做父引用指向子类对象 --> 即多态
2.3 接口的理解
-
目前,发现这些使用抽象也可以写,使用接口也可以写,甚至不用任何抽象接口也能写,那么如何选择使用哪个技术?
-
抽象类,是类,类是表示一类具有相同属性和行为的对象的几乎,换句话类能表示一个具体的实例.即类侧重于描述一类东西
-
接口不是类,主要在于描述一些规范,或者说是一种能力,接口侧重于描述规范或者是约定
三、每日一练:接口多态练习
设计程序 :
- 电脑类的属性USB接口数组 : 有3个usb插口
- 电脑类的功能 :
-
- 通过接口插入外设 (u盘,麦克风,键盘等)
addUSB(USB usb) {
}
- 通过接口插入外设 (u盘,麦克风,键盘等)
-
- 开机
要求: 电脑开机前,先启动外设
- 开机
-
- 关机
要求: 电脑关机前,先关闭外设
- 关机
-
- 外设类(u盘,麦克风,键盘等)
- 功能 : 启动 关闭
- USB接口
- 定义usb设备的统一功能
开启() 关闭()
- 效果 :
- 创建电脑对象,能插入外设,调用方法电脑开机,电脑开机前 外设启动,
- 电脑关机前,外设先关闭
UML类图
参考代码
最后
如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍