继承:
Java中使用extends关键字实现类的继承机制,其语法规则是:
<modifier>class<name>
[extends<superclass>]
{
... ...;
}
通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)
Java只能支持单继承,不允许多继承:
一个子类只能有一个基类,但一个基类可以派生出多个子类(儿子只能有一个父亲,但父亲可以有多个儿子)
代码分析及运行结果:
class Person{
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
class Student extends Person{
private String school;
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
}
public class TestPerson{
public static void main(String[] args) {
Student student = new Student();
student.setName("John");
student.setAge(18);
student.setSchool("imut");
System.out.println(student.getName());
System.out.println(student.getAge());
System.out.println(student.getSchool());
}
}
这是一段很简单的子类Student继承父类Person的代码,直接看结果
内存分析:
访问控制:
Java权限修饰符public protected private置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限。
但对于class的权限修饰只可以用public和default
public类可以在任何地方被访问
default类只可以被同一个包内部的类访问
简单用程序模拟一下四个修饰符的不同:
public class TestAccess {
}
class T{
private int i = 0;
int j = 0;//相当于default int j = 0;
protected int k = 0;
public int m = 0;
}
class TT{
public void m() {
T t = new T();
System.out.println(t.i);//报错
}
}
这里在有注释的一行报错了,提示是:字段T.i不可视
证明被private修饰过的i,只能在class T中被访问,而在其他的类中无法被访问(也就是私有成员变量)
这里在classTT中试试
System.out.println(t.j);
结果是可以访问的,证明在同一包中的其他类可以访问default修饰的变量
这时我们在同一个包中在创建一个类TestProtected
public class TestProtected extends T {
public void mthod() {
System.out.println(k);
}
}
就可以正确访问k
子类可以继承父类的所有变量,但如果继承了私有变量private会发生什么呢?
class Parent{
private int n_private = 1;
/*...
...*/
}
class Child extends Parent{
public void f(){
n_private = 10;
/*...
...*/
}
}
这时会发生错误,Child类中不能访问n_private,也就是说在子类继承父类的过程中只有私有变量的所有权却没有私有变量的使用权(只能看不能碰)。