· 一个类继承另一个类 用 extends 关键字, extends 英文意思为 扩展(一个类继承了一个类 即为 扩展了这个类)
class Dad
{
private int n_private = 1;
int n_friendly = 2;
protected int n_protected = 3;
public int n_public = 4;
}
class Child extends Dad // child extends dad 表示 class child 大于(成员包含) class dad
{
public void f()
{
// n_private = 10; 错! 父类中的 private变量 也被该子类 继承,但是该子类不能 使用它
n_friendly = 20;
n_protected = 30;
n_public = 40;
}
}
>> 继承中的构造方法
<object reference 对象引用 == ObjRef>
只有调用了构造方法,一个对象才能被搭建起来 classname objectreference = new classname(); 调用了默认的构造方法 “classname() { }”
。子类的 构造 过程中 必须 先调用其 父类 的构造方法 原因:
1.在子类对象里边包含了父类对象,而父类对象的建立也必须调用父类里边的构造方法
2.子类直接获取父类中的数据,在创建子类对象时需要先查看父类对象是如何初始化这些数据的,所以在 子类的构造过程中 首先要调用父类的构造方法;
。子类可以在自己的 构造方法 中使用 super(参数列表) 来调用基类的构造方法 :如果父类有多个构造方法 由于方法重载 所以可以用 super(参数列表) 的
方式来根据 参数的个数 来判断调用的是哪个构造方法。 如果使用 super(参数列表) 这种方式, 则它必须写在子类构造方法的第一行(先造
父类才能造出子类)
。使用 this(参数列表) 调用自己本身类的其他的构造方法
。如果子类的构造方法中没有显示的调用基类构造方法,则默认调用基类无参数的构造方法
。如果子类构造方法中既没有显示调用基类构造方法,而基类中有没有无参的构造方法,则编译出错
。一个构造方法中只可以有一条 super(参数列表); 或者一条 this(参数列表); 二者不能同时存在,而且要放在第一行(初始化要首先先完成),
。父类构造函数里边默认也有 super(); 因为所有父类 extends Object
继承中的构造方法示例:
class A
{
protected void print(String s) // 3行
{
System.out.println(s); // 先输出 A()
}
A() // 7行,所以从这开始执行
{
print("A()");
// 将 字符串 " A() " 传递给3行的String类型的形参 s,执行完后回到 子类B 中的构造方法 B()-->19行
}
public void f()
{
print("A:f()");
}
}
class B extends A
{
B() // 19 行 B类 为从 A类 继承来的子类,要创建 子类B,先要调用 父类的 构造方法,
{
print("B()");
/*
在 子类B 中没有使用 super(); 这种方式来调用父类的构造方法,所以默认调用父类里边
无参数的 构造方法,调用 A();-->7行 调用完 A() 之后 调用从 父类A 中继承来的
方法 print(String s); 输出 B() 执行完后 回到 main()
*/
}
public void f() // 这里是 方法的重写
{
print("B:f()");
}
public static void main(String[] args)
{
B b = new B(); // 第一步 创建一个对象 先调用 构造方法,调用 B()-->19行 执行完后执行下一句
b.f(); // 输出 B:f()
}
}
输出结果:
A() B() B:f()
附加知识:
>> 访问权限:
访问控制符是对于类的外部而言的,在一个类的内部,所有的 变量 方法 都是透明的。
同一个类 public protected 包访问控制符(默认不写) private
同一个包 public protected 包访问控制符(默认不写)
子类 public protected
任何地方 public
>> super关键字
使用 super 来引用基类(父类)的成分(方法 变量 等),如: 从父类继承的子类,在对父类的方法进行重写时,如果子类中重写
方法内容的一部分跟父类中的(被重写类)完全一样,那么可以用 super.name(); 方式来 访问、得到 该父类的被重写方法。
super 是对当前对象里边 父类 对象的引用,this(只存在于方法里) 是对当前调用 该方法(含有this的方法) 的对象的引用。