第2天
1.抽象类
目标:抽象类的入门概述。
引入:
父类知道子类一定要完成某个功能,但是每个子类实现的情况都不一样
而且子类都会用自己的功能了,父类的该功能就可以定义成抽象的方法。
拥有抽象方法的类必须定义成抽象类。
什么是抽象方法?
没有方法体,只有方法签名,必须用abstract修饰的方法就是抽象方法。
什么是抽象类?
拥有抽象方法的类必须定义成抽象类。
抽象类必须用abstract关键字修饰。
小结:
抽象类本身还是一个类,拥有类的五大成分,只不过是还可以有抽象方法。但正因为有抽象方法,所以无法创建对象。
抽象方法:没有方法体,只有方法签名,必须用abstract修饰的方法就是抽象方法。
抽象类:拥有抽象方法的类必须定义成抽象类,必须用abstract修饰。
public class AbstractDemo {
public static void main(String[] args) {
Wolf wolf = new Wolf();
wolf.eat();
}
}
class Wolf extends Animal{
@Override
public void eat() {
System.out.println("狼吃肉");
}
}
// 抽象类:拥有了抽象方法的类必须定义成抽象类。抽象类必须加上abstract修饰。
abstract class Animal{
// 抽象方法:没有方法体,只有方法签名,必须加上abstract修饰。
public abstract void eat();
}
目标:抽象类的使用。
抽象类是为了被继承。
总结:
一个类继承了抽象类,必须重写完抽象类的全部抽象方法
,否则这个类必须定义成抽象类。
因为拥有抽象方法的类必须定义成抽象类。
abstract class Wolf extends Animal{
@Override
public void eat() {
System.out.println("狼吃肉");
}
}
abstract class Animal{
public abstract void eat();
public abstract void run();
}
目标:抽象类的特征研究和深入。
抽象类的特征:有得有失。
有得:抽象类拥有了得到抽象方法的能力。
失去:抽象类失去了创建对象的能力。
面试题:抽象类是否有构造器,是否可以创建对象,为什么?
答:抽象类作为类一定有构造器,而且必须有构造器。
提供给子类继承后调用父类构造器使用的。
抽象类虽然有构造器,但是抽象类绝对不能创建对象。
抽象类中可能存在抽象方法,抽象方法不能执行。
抽象在学术上本身意味着不能实例化。
抽象类除了有得有失之外,类的其他成分人家都具备!!
小结:
抽象类不能创建对象。
抽象类除了不能创建对象之外,类的其他成分它都具备!
抽象类中也可以没有抽象方法!!
抽象类存在的意义有两点:
(1)被继承,抽象类就是为了被子类继承,否则抽象类将毫无意义。(核心意义)
(2)抽象类体现的是"模板思想":部分实现,部分抽象。(拓展)
– 可以使用抽象类设计一个模板模式。
目标:抽象类的注意事项和总结
1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。
2. 抽象类一定有而且是必须有构造器,是供子类创建对象时,初始化父类成员使用的。子类的构造器中,有默认的super(),需要访问父类构造器。
3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类。
5. 抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。抽象类中已经实现的是模板中确定的成员,抽象类不确定如何实现的定义成抽象方法,交给具体的子类去实现。
2.接口
目标:接口的概述和定义等。(以理解和记住语法为主)
什么是接口?
接口是更加彻底的抽象,接口中全部是抽象方法和常量,没有其他成分。(JDK 1.8之前)
接口有啥用?
接口体现的是规范思想,实现接口的类必须重写完接口中全部的抽象方法。
规范 == 约束。
接口称为被实现,实现接口的类称为实现类。
定义接口的格式:
修饰符 interface 接口名称{
}
interface:定义接口的关键字。
接口中的成分研究(JDK 1.8之前):
1.抽象方法
a.接口中的抽象方法默认会加上public abstract修饰,所以可以省略不写。
2.常量
常量:是指有public static final修饰的成员变量,有且仅能被赋值一次,值不能改变。
常量的名称规范上要求全部大写,多个单词下划线连接。
常量修饰的public static final 可以省略不写,默认会加上。
小结:
定义接口使用的关键字:interface
接口中的成分在JDK 1.8之前只能有:常量和抽象方法。
在接口中常量的修饰符:public static final 可以省略不写,默认会加上。
在接口中抽象方法的修饰符:public abstract 可以省略不写,默认会加上。
public interface InterfaceDemo {
// 2.常量
// 只有一份,在执行的过程中其值必须有,但是不能改变!
// 常量是public static final修饰
// 常量的名称建议字母全部大写,多个单词用“_”连接
// 在接口中常量可以省略public static final不写,默认会加上该三个修饰符!
//public static final String SCHOOL_NAME = "黑马";
String SCHOOL_NAME = "黑马";
// 1.抽象方法
// public abstract void run();
// 接口中的抽象方法默认会加上public abstract修饰,所以可以省略不写。
void run();
void work();
}
目标:接口的基本实现。
接口是用来被类实现的。
引入:
类与类是继承关系:一个类只能直接继承一个父类。
类与接口是实现关系:一个类可以实现多个接口。
实现接口的类称为“实现类”。
子类 继承 父类
实现类 实现 接口
实现类实现接口的格式&#