一、抽象类
(一)抽象方法
1.概述
java中只有方法声明没有方法实现且被关键字abstract修饰的方法就是抽象方法。
abstract:关键字,表示抽象的含义,被他修饰的资源自然而变成抽象的。
2.格式
修饰符 abstract 返回值类型 方法名 (参数列表);
3.作用
提取相同功能不同结果的方法的声明,用来需要定义一个这样的方法名字,但是不提供方法是想,以后谁想用这个方法,那就自己提供方法的实现。
4.注意
只能定义在抽象类和接口中
(二)抽象类
1.概念
1)属于类的一种,属于特殊的类
2)java中被关键字abstract修饰的类就是抽象类
2.格式
修饰符 abstract class 类名{
抽象类能出现的内容和普通类一样,只是多了抽象方法
}
3.内容
1)属性
2)行为
3)构造方法
4)抽象方法
4.普通行为
1)普通方法
2)静态方法
5.特殊行为
抽象方法 抽象类中一般都会定义抽象方法,如果不定义抽象方法,直接定义为普通方法
public abstract class Person {
private String name;
public static String color = "淡黄色";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static String getColor() {
return color;
}
public static void setColor(String color) {
Person.color = color;
}
public Person(){};
public Person(String name){
this.name = name;
}
//抽象方法,没有{}没有方法体
public abstract void eat();
public abstract void drink();
}
public class Student extends Person {
public Student(){}
public Student(String name){
super(name);
}
@Override
public void eat() {
System.out.println("吃饭");
}
@Override
public void drink() {
System.out.println("喝水");
}
}
public class UseStudent {
public static void main(String[] args) {
Student s = new Student();
s.eat();
s.drink();
Student s2 = new Student("张三");
System.out.println(s2.getName());
s2.eat();
s2.drink();
}
}
6.特点
1)有构造方法但是不能创建对象,抽象类不能实例化
抽象类天生就是用来当父类的
2)构造方法给子类创建对象的时候调用使用,通过super语句使用抽象类中的构造方法
3)他的抽象方法不必须被子类重写,而且要重写全部的抽象方法。一个普通的类如果继承了抽象类,那么这个类在继承抽象类之后就必须重写抽象方法。
7.抽象类和抽象方法的关系
1)抽象类不一定有抽象方法
2)有抽象方法的类一定是抽象类
二、模板设计模式
1.设计模式的概念
设计模式是一套反复使用,多人知晓,经过分类的代码设计经验的总结。
代码使用设计模式的目的:为了重用代码、让代码更容易被别人理解,保证代码的可靠性和程序的重要性
java中有很多的设计模式,一共23种,每一种都是用来解决某一个方向问题的固定解决方案,也是最优解决方案。
2.模板设计模式
把抽象类整体看成一个模板,模板中不能决定的步骤使用抽象方法表示步骤方法。
意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构下,即可重新定义该算法的某些特定的步骤。
主要解决:一些方法通用,却在每一个子类中都重写的这一方法的问题。
例子:
发现做菜的流程都一样,我们就可以把做菜的流程做成一个模板
模板类:
public abstract class Cooking {
public final void cookie(){
prepareMaterial();
putOil();
fire();
addMaterial();
striFry();
outPot();
}
public abstract void prepareMaterial();
public void putOil(){
System.out.println("放油");
}
public void fire(){
System.out.println("开火");
}
public abstract void addMaterial();
public void striFry(){
System.out.println("翻炒");
}
public void outPot(){
System.out.println("出锅");
}
}
子类:
public class HongShaoRou extends Cooking {
@Override
public void prepareMaterial() {
System.out.println("五花肉");
}
@Override
public void addMaterial() {
System.out.println("加肉");
}
}
主类:
public class Main {
public static void main(String[] args) {
HongShaoRou hsr = new HongShaoRou();
hsr.cookie();
}
}
三、接口——java中的一种引用类型
1.概述
接口本身是对规则定义的一种集合体(接口中定义的都是规则)
规则:指定的一种固定标准[行为规范]
比如:婚姻法的一夫一妻制
电脑的USB接口( 电脑厂商制定USB结构规则,设备要多长, 多宽,怎么排线)
规则只是声明了行为,没有指定具体的行为内容
--java中规则就是行为,[方法]的声明
--规则就变为方法的声明,规则其实就是java中的抽象方法
接口其实就可以理解为是定义抽象方法的集合体
作用:对外公开功能[规则],让大家想要使用该功能必须来实现接口,重写接口中抽象方法
好处:可以实现解耦合的作用
2.接口的定义及特点
1)格式:
使用关键字interface来定义
修饰符 interface 接口名{
接口的内容(抽象方法)
}
2)内容特点
①属性 ----也是使用变量体现 默认被public static final 修饰
②行为:只有抽象方法
3)注意事项:
①没有构造方法
②不能直接创建接口对象
③接口可以直接使用接口的静态常量属性
④接口是用来实现的,也就是水箱成为符合接口声明抽象方法对象,谁来是想这个接口
public interface Inter1 {
public static final int MAX=100;
public abstract void speak();
public abstract void eat();
public abstract void drink();
}
public class Student implements Inter1 {
@Override
public void eat() {
System.out.println("吃");
}
@Override
public void drink() {
System.out.println("喝");
}
@Override
public void speak() {
System.out.println("说");
}
}
public class UseStudent {
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.MAX);
s.drink();
s.eat();
s.speak();
}
}
3.接口的实现
·概述
接口中的规则描述的只有声明没有具体的内容,想要被使用必须把要求的内容描述具体,只能通过类对接口规则的描述进行补充,类就和接口产生关系,这种关系就叫做实现关系:类通过implements 关键字连接接口,就可以对接口的规则进行补充。把这种类连接接口的方式叫做接口的实现
注意:
类对接口进行规则的补充,类自然而然的有了接口描述的规则的功能,而且类必须实现接口中所有抽象方法.
大白话:一个实现接口,就要把对接口所有抽象重写,(- 一个实现一个接口 就相当于继承了这个接口);
·如何实现接口
类通过implements 关键字连接接口
格式:
修饰符 class 类名 implements 接口1,接口2,...{
类的内容
}
分类:
单实现:一个类实现一个接口
多实现:一个类实现多个接口
一个普通类实现接口之后必须重写接口中所有的抽象方法
4、类与类、类与接口,接口与接口之间的关系(简答题)
类与类:
只能是继承关系
java中的类继承只支持单继承和多层继承,不支持多继承
类与接口:
只能是实现关系,一个类实现某个接口,就相当于继承了这个接口
接口与接口:
继承关系:
java中接口继承支持所有继承方式
单继承 A接口继承B接口
多层继承 A接口继承B接口 B接口继承C接口
多继承 A接口继承B,C,D,...接口,一个接口可以继承多个接口,即使多个父接口 有相同的抽象方法,子接口相当于只继承了一个抽象方法。