1 类的继承
- Java中使用extends关键字实现类的继承机制,其语法规则为:
<modifier> class <name> [extends <superclass>]{... ...}
- 通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)。
- Java只支持单继承,不允许多继承。一个子类只能有一个基类,一个基类可以派生出多个子类。
class Parent{
private int n_private = 1;
int n_friendly = 2;
protected int n_protected = 3;
public int n_public = 4;
}
class Child extends Parent{
public void f(){
//n_private 无法访问所以不能进行赋值操作,其他可以
n_friendly = 20;
n_protected = 30;
n_public = 40;
}
}
2 访问控制
Java权限修饰符public protected private置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限。
对于class的权限修饰只可以用public和default。public类可以在任意地方被访问,default类只可以被同一个包内部的类访问。
3 方法的重写(重写的时候可以直接将基类中的方法名复制到子类中,以免写错方法的名字)
- 在子类中可以根据需要对从基类中继承来的方法进行重写。
- 重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。
重写方法不能使用比被重写方法更严格的访问权限。
如下,基类Person的方法getInfo()在子类Student中进行重写:
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;}
public String getInfo() {
return "Name: "+ name + "\n" +"age: "+ age;
}
}
class Student extends Person {
private String school;
public String getSchool() {return school;}
public void setSchool(String school)
{this.school =school;}
public String getInfo() {
return "Name: "+ getName() + "\nage: "+ getAge()
+ "\nschool: "+ school;
}
}
public class TestOverWrite {
public static void main(String arg[]){
Student student = new Student();
Person person = new Person();
person.setName("none");
person.setAge(1000);
student.setName("John");
student.setAge(18);
student.setSchool("SCH");
System.out.println(person.getInfo());
System.out.println(student.getInfo());
}
}
4 super关键字
在Java类中使用super来引用基类的成分:
class FatherClass {
public int value;
public void f(){
value = 100;
System.out.println("FatherClass.value="+value);
}
}
class ChildClass extends FatherClass {
public int value;
public void f() {//重写f()
super.f();
value = 200;
System.out.println("ChildClass.value="+value);
System.out.println(value);
System.out.println(super.value);
}
}
public class TestInherit {
public static void main(String[] args) {
ChildClass cc = new ChildClass();
cc.f();
}
}
内存分析:
运行结果: