封装、继承、多态
位置 | public | protected | 默认 | private |
---|---|---|---|---|
同一个类 | Y | Y | Y | Y |
同一个包下的类 | Y | Y | Y | N |
不同包子类 | Y | Y | N | N |
不同包无关类 | Y | N | N | N |
这里只提一个小点:构造方法调 其他构造必须放第一行
class A {
public A(){}
public A(Object o){
this(); // 必须放第一行!!!
// ...
}
}
抽象:把多个事务的共性抽取出来
抽象类:Java可以定义没有方法体的方法,该方法由其子类继承并具体实现,该方法我们称之为抽象方法,含有抽象方法的类被称为抽象类
属性:没要求
方法:静态、非静态都可以,可以有也可以没有抽象方法(修饰符:abstract
,没有方法体)
构造方法:有(但是不能实例化,为子类实例化)
继承:单继承(必须重写抽象方法)
注意:有抽象方法的类必须是抽象类,抽象类不一定有抽象方法
栗子
// 抽象类必须由abstract修饰
abstract class 抽象类{
public int num;
public 抽象类() {
// 虽然我有构造器,但是依然不能实例化
}
// 抽象方法必须由abstract修饰
public abstract int getNumAddOne();
}
概念:定义了一种规范
好处:
多实现(implements
,一个类虽然只能继承一个父类,但是可以实现多个父接口)
interface A{}
interface B{}
interface C{}
class E{}
class F extends E implements A,B,C{}
多继承(extends
,一个接口可以继承多个接口,没错,多继承!)
interface A{}
interface B{}
interface C extends A,B{ }
注意:实现接口,必须重写抽象方法( jdk1.8接口可定义静态方法 )
作用:解耦(降低程序间的依赖关系)高内聚低耦合
特点
public static final
;不写的话默认也是这个)public abstract
;不写的话默认也是这个)、静态方法(jdk1.8+)栗子
public interface 接口 {
// 接口属性只能用 public static final 修饰
public static final double LENGTH = 2;
// 默认也是 public static final
double WIDTH = 0.1;
// 接口方法全是抽象方法
public abstract void charge();
// 默认也是 public abstract
void read();
}
接口 | 抽象类 | |
---|---|---|
继承 | 多继承,多实现 | 单继承 |
属性 | 常量(public static final) | 都可以 |
方法 | 抽象(public abstract)/静态(jdk1.8) | 都可以(有抽象方法的类一定是抽象类) |
构造 | 无 | 有(不能实例化,为子类实例化) |
关系 | like-a | is-a |
思想 | 不考虑事物的相关性 只是一种规范 | 用于一组相关的事物 总不能让狗继承抽象花吧 二者完全没有相关性 |