您的位置:首页 > 编程语言 > Java开发

Java面向对象5——类的继承与权限控制,重写与super

2016-10-18 20:01 375 查看
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 方法的重写(重写的时候可以直接将基类中的方法名复制到子类中,以免写错方法的名字)

在子类中可以根据需要对从基类中继承来的方法进行重写。

重写方法必须和被重写方法具有相同方法名称、参
4000
数列表和返回类型。

重写方法不能使用比被重写方法更严格的访问权限。

如下,基类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();
}
}


 内存分析:

 


 运行结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java
相关文章推荐