封装、继承和多态
封装
- 1、良好的封装能够减少耦合。
- 2、类内部的结构可以自由修改。
- 3、可以对成员进行更精确的控制。
- 4、隐藏信息,实现细节。
继承
-
Java 有三种实现多继承效果的方式,分别是内部类、多层继承和实现接口。
-
父类的构造方法不能被继承
-
子类的构造过程必须调用其父类的构造方法:Java 虚拟机构造子类对象前会先构造父类对象,父类对象构造完成之后再来构造子类特有的属性,这被称为内存叠加。
-
如果子类的构造方法中没有显示地调用父类构造方法,则系统默认调用父类无参数的构造方法。
-
Java子类重写继承的方法时,不可以降低方法的访问权限,子类继承父类的访问修饰符作用域不能比父类小
-
继承当中子类抛出的异常必须是父类抛出的异常或父类抛出异常的子异常。
static修饰符
class C1{
public int a;
public C1(){}
// public static C1(){}// 构造方法不允许被声明为static
public static void doA() {}
public static void doB() {}
}
class C2 extends C1{
public static void doC()//静态方法中不存在当前对象,因而不能使用this和super。
{
//System.out.println(super.a);
}
public static void doA(){}//静态方法能被静态方法重写
// public void doB(){}//静态方法不能被非静态方法重写
}
子类父类初始化顺序
- 父类中静态成员变量和静态代码块
- 子类中静态成员变量和静态代码块
- 父类中普通成员变量和代码块,父类的构造方法
- 子类中普通成员变量和代码块,子类的构造方法
class Father{
// 父类构造方法 第四
public Father() {
System.out.println(++b1+"父类构造方法");
}
// 父类static 第一 注意顺序
static int a1=0;
static {
System.out.println(++a1+"父类static");
}
// 父类成员变量和代码块 第三
int b1=a1;
{
System.out.println(++b1+"父类代码块");
}
}
class Son extends Father{
// 子类构造方法 第六
public Son() {
System.out.println(++b2+"子类构造方法");
}
// 子类static第二步
static {
System.out.println(++a1+"子类static");
}
// 子类成员变量和代码块 第五
int b2=b1;
{
System.out.println(++b2 + "子类代码块");
}
}
多态
Java 的多态是指在面向对象编程中,同一个类的对象在不同情况下表现出来的不同行为和状态。
- 子类可以继承父类的字段和方法,子类对象可以直接使用父类中的方法和字段(私有的不行)。
- 子类可以重写从父类继承来的方法,使得子类对象调用这个方法时表现出不同的行为。
- 可以将子类对象赋给父类类型的引用,这样就可以通过父类类型的引用调用子类中重写的方法,实现多态。
多态的前提条件
- 子类继承父类
- 子类重写父类的方法
- 父类引用指向子类的对象