今天是接口 抽象类 final 枚举
查缺补漏吧 难度应该不大
抽象类:
抽象方法:没有方法体 只有方法签名必须用abstract修饰 用有抽象方法的类必须定义成抽象类
抽象类的使用:
package com.itheima._01抽象类的概述;
* Description: 抽象类的概述
* 抽象类: 父类知道子类一定要完成某个功能 但是子类完成的情况不一样
* 子类以后也会重写自己的功能 那么父类的功能就可以定义为抽象方法 子类重写调用自己的子类
public class Abstract_Demo {
public static void main(String[] args) {
Dog taidi = new Dog();
taidi.run();
}
}
//class Animal {
// //子类要完成这个功能 由子类自己重写完成 因为每次都要重新实现
// //抽象类就不用方法体了
// public void run() {
// System.out.println("动物跑的很快");
// }
}
abstract class Animal {
//子类要完成这个功能 由子类自己重写完成 因为每次都要重新实现
//抽象类就不用方法体了
public abstract void run();
}
class Cat extends Animal {
@Override
public void run() {
System.out.println("猫跑的快");
}
}
class Dog extends Animal {
@Override
public void run() {
System.out.println("狗跑的快");
}
}
继承抽象类 必须重写完抽象类的全部方法 抽象类里面有几个必须全部实现
package com.itheima._02抽象类的使用;
public class AbstractDemo {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.work();
Manager manager = new Manager();
manager.work();
}
}
//需求 员工管理系统
abstract class Employee {
//子类完成工作内容 每个工作的内容不一样
public abstract void work();
}
class Teacher extends Employee {
@Override
public void work() {
System.out.println("老师需要上课");
}
}
class Manager extends Employee {
@Override
public void work() {
System.out.println("班主任需要管理学生");
}
}
抽象 类有构造器 必须有构造器 提供给子类创建对象 调用父类使用 但抽象了不可以创建对象
抽象不可以具体化 哪怕里的方法不是抽象的 有实例对象
package com.itheima._03抽象类的特征;
public class AbstarctDemo {
public static void main(String[] args) {
Animal a = new Animal();
}
}
abstract class Animal {
// public abstract void run();
private String name;
//实例化方法//静态方法
public void test() {
}
//抽象方法
public abstract void run();
//构造器
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
接口复习:接口是规范 通用标准 只有抽象方法跟常量
package com.itheima._07接口概述;
* Description:接口概述
* 借口提现的是规范思想 实现接口的子类必须重写完接口的全部方法
* 接口的定义格式
* 修饰符:interface 接口名称
* 1.8之前只有抽象方法跟常量
public interface InterfaceDemo {
//抽象方法 public abstract 可省略
public abstract void run();
public abstract void work();
//常量 不可以写静态变量 静态变量属于类本身
// public static String schoolName;
//final在运行当中不可更改 变量值只有一个而且在程序运行的过程中不可更改
//public static final 这是静态常量 大写 借口中可以省略不写 默认加上
// public static final String SCHOOL_NAME = "黑马";
String SCHOOL_NAME = "黑马";
//接口里面的内容是公开的
}
接口与接口之间多实现 接口之间的多继承
接口中没有构造器 不能创建对象
静态代码块
package com.itheima._13代码块;
import java.util.ArrayList;
import java.util.List;
* Description:静态代码块
* 类由五大成分 成员变量 方法 构造器 代码块 内部类
* 有误static 修饰可以分为静态代码块 实例代码块
* 静态代码块 必须用static 修饰 是类 可以跟类一起优先加载 而且自动触发执行 static先执行
* static{
* }
* 静态代码块可以在执行类之前进行静态资源的初始化操作
public class Code1 {
public static List<String> cards = new ArrayList<>();
static {
// 提前准备 代码优雅
System.out.println("静态代码块");
cards.add("黑桃3");
}
public static void main(String[] args) {
}
}
package com.itheima._13代码块;
* Description: 实例代码块
* 无static 属于类的每个队形 会与类的每个对象一起加载
* 每次创建对象的时候加载
* 格式{
* }
* 实例代码块的代码实际上是提取到每个构造器器中实现
public class Code2 {
private String name;
{//每次创建对象都会调用
System.out.println("实例代码块执行一次");
name = "balck";
}
public static void main(String[] args) {
// System.out.println("main方法");
Code2 code21 = new Code2();
System.out.println(code21.name);
Code2 code22 = new Code2();
System.out.println(code22.name);
}
}
final关键字