一 继承和权限控制
1.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 { //继承父类Parent
public void f() {
n_private = 10; //直接使用父类成员
n_friendly = 20; //直接使用父类成员
n_protected = 30; //直接使用父类成员
n_public = 40; //直接使用父类成员
}
}
其内存结构如下所示:
在堆空间中有一个对象Child,Child继承了Parent所有的成员(成员变量和方法)
编写程序:
写一个程序,包含三个类,第一个类为"人",其属性有名字,年龄;在这个类里面可以设置名字和年龄,也可以获取名字和年龄;第二个类为"学生",继承"人"这个类,学生属性有学校,可以设置学校也获取学校;第三个类为主类,验证上述的内容
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 Students extends Person {
private String school;
public void setSchool(String school) {
this.school = school;
}
public String getSchool() {
return school;
}
}
public class TestPerson {
public static void main(String[] args) {
Students student = new Students();
student.setName("John");
student.setAge(18);
student.setSchool("SCH");
System.out.println(student.getName());
System.out.println(student.getAge());
System.out.println(student.getSchool());
}
}
1.1.1 小结
- 通过继承可以简化类的定义,实现代码的重用
- 子类继承父类的成员变量和成员方法,但不继承父类的构造方法
- java中只有单继承,没有像c++那样的多继承。多进程会引起混乱,使得继承链过于复杂,系统难于维护。多继承就是为了实现代码的复用性,却引入了复杂性,使得系统类的关系混乱
- java中的多继承,可以通过接口来实现
- 如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object
1.2 访问控制
Java权限修饰符public protected private置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限。
如下所示,是访问权限列表
- te:只能在同一个类内部使用,就算其他类继承了该类,也无法使用
- default:类内部和同一个包内可以使用,在子类中也无法使用。默认权限,关键字default无需写
- protected:在类内部、同一个包内、子类里面可以访问使用
- public:在任何地方都可以使用
对于class的权限修改时只可以用public和default
- public类可以在任意地方被访问
- default类只可以被同一个包内部的类访问