java 中的继承

继承的概念

继承就是子类继承父类的特征和行为,使得子类具有父类得属性和方法。

继承得关键字:extends

语法格式:<modifier> class <name> [extends superclass] {......}

通过继承,子类自动拥有基类(superclass)得所有成员(成员变量和方法)。

java只支持单继承,不允许多继承; 但是c++中允许多继承。

一个子类只能继承一个父类,但是一个父类却可以派生多个子类(一个孩子只有一个爸爸,但是爸爸可以有多个孩子)

简单的例子

 1 /*
 2  * 父类 Person
 3  */
 4 class Person {
 5     private String name;
 6     private int age;
 7     
 8     public String getName() {
 9         return name;
10     }
11     public void setName(String name) {
12         this.name = name;
13     }
14     public int getAge() {
15         return age;
16     }
17     public void setAge(int age) {
18         this.age = age;
19     }
20     
21     
22 }
23 
24 /*
25  * 子类 Student
26  */
27 class Student extends Person {
28     private String school;
29 
30     public String getSchool() {
31         return school;
32     }
33 
34     public void setSchool(String school) {
35         this.school = school;
36     }
37     
38     
39 }
40 
41 /*
42  * 测试类
43  */
44 public class Test {
45     public static void main(String[] args) {
46         Student stu=new Student();
47         stu.setName("刘杰");
48         stu.setAge(22);
49         stu.setSchool("淮阴师范学院");
50         
51         System.out.println("姓名:"+stu.getName());
52         System.out.println("年龄:"+stu.getAge());
53         System.out.println("学校:"+stu.getSchool());
54         
55     }
56 }

继承在内存中的解析:

Student stu =new Student();

stu 对象的引用,存放在stack中,指向-->new Student();

new Student()因为是new 出来的对象,所以存放在heap中。但是Student是子类,他继承父类Person。Student(子类)包含Stundent(父类),子类比父类大!!!

内存分析如下所示:

访问控制

java权限修饰符(modifier) public protect private置于类的成员定义或者声明前。

作用:限定其他对象对该类对象成员的访问权限。

 

 1 package com.Demo;
 2 
 3 /*
 4  * 父类 Person
 5  */
 6 class Person {
 7     private String name;
 8     private int age;
 9     
10     public String getName() {
11         return name;
12     }
13     public void setName(String name) {
14         this.name = name;
15     }
16     public int getAge() {
17         return age;
18     }
19     public void setAge(int age) {
20         this.age = age;
21     }
22     
23     
24 }
25 
26 /*
27  * 子类 Student
28  */
29 class Student extends Person {
30     private String school;
31 
32     public String getSchool() {
33         return school;
34     }
35 
36     public void setSchool(String school) {
37         this.school = school;
38     }
39     
40     
41 }
42 
43 class Access {
44     
45     //私有变量安全性更高
46     private int i=0;
47     
48     //default包权限 同一个包里面的class 可以访问其他class类里面的default 变量
49     //c++中不存在default 访问权限符
50             int j=1;
51             
52     //受保护  同一个包里面可以访问protect变量,而且该类的子类还可以protect
53     protected int z=2;
54     public  int y=3;
55     
56     //public 类型访问类中的私有变量
57     public int getI(){
58         return i;
59     }
60 }
61 
62 class AccessOne extends Access {
63     
64 }
65 /*
66  * 测试类
67  */
68 public class Test {
69     public static void main(String[] args){
70         
71         Access a=new Access();
72         
73         /*
74          * AccessOne继承于Access,拥有Access的所有变量成员(包括private),但是对于private没有使用权限,有访问权限!
75          */
76         AccessOne a1 =new AccessOne();
77         Test t=new Test();
78         /* 
79          * 报错  i是用private修饰,即使是用Access.i访问也没有任何用。
80          *  只能在class Access本身类中用成员方法进行访问,而且定义的方法还要用public进行修饰。
81          *  若继续用private还是无法进行访问
82          */
83         //System.out.println(a.i);  
84         
85         System.out.println(a.getI());
86         
87         System.out.println(a.j);
88         
89         System.out.println(a.z);
90         System.out.println(a1.z);
91     }
92 }

 

posted @ 2017-02-17 16:53  勤学鸟  阅读(307)  评论(0编辑  收藏  举报