8.抽象类与接口
1. final 关键字
final 最终,最后,完结
- 修饰变量是常量;
全大写
- 全局: 必须赋初始值: 一般用 public static final 修饰
- 局部: 可以后赋值。
- 修饰类: 不可被继承
- 修饰方法: 不可被覆盖
2. 权限访问修饰符
权限访问修饰符 | 跨包 | 跨包(继承) | 同包 | 当前类中 |
---|---|---|---|---|
public 共有的 | ○ | ○ | ○ | ○ |
protected 保护的 | ○ | ○ | ○ | |
default/ package 默认的 | ○ | ○ | ||
private 私有的 | ○ |
public 哪里都可以访问
protected : 继承的场景下可以跨包 (给子类继承用的)
default: 同包,package级
private: 当前类可以访问
修饰方法,属性,类(public 或者 default)
3. 抽象类:abstract
- 没有方法体的方法就是抽象方法用
abstract
修饰 - 有抽象方法的类就是抽象类,用
abstract
修饰 - 抽象类中可以有非抽象方法,也可以没有抽象方法
- 抽象类不能实例化
- 子类继承抽象类要覆盖所有的抽象方法。
package com.etc.lesson08;
public abstract class Animal {
// 抽象方法
public abstract void eat();
public void move() {
System.out.println("Animal@move()");
// Animal an = new Animal()
}
}
场景: 强制子类要覆盖某些行为。
4. 接口: interface
- 接口中的方法都是抽象方法,
强制默认
public abstract 修饰 - 接口中的属性都是常量, 强制默认 public static final 修饰
- 接口不能实例化
- 子类 实现 接口,要实现所有的抽象方法。
实现==override implements == Override
- java单继承类,多实现接口, 接口可以多继承接口
public interface Flyable {
public abstract void fly();
void fly1();
}
class Bird implements Flyable {
@Override
public void fly() {
System.out.println("Bird Flyable");
}
}
class Duck extends Bird implements Swimmingable, Eggable{
@Override
public void dropEgg() {
System.out.println("Duck drop egg");
}
@Override
public void swimming() {
System.out.println("Duck swimming");
}
}
interface Swimmingable {
void swimming();
}
interface Eggable {
void dropEgg();
}
interface SwimmingAndEgg extends Swimmingable, Eggable{
}
UML:虚线是实现,实线是继承