zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    angular2.0学习笔记4.npm常用指令记录及angular语法
    angular2.0学习笔记7.echarts 地图(type:'map')slice undifined 出错问题
    angular2.0学习笔记6.编程风格指南
    ionic3搭建笔记及编译成apk
    Ionic3--数据存储
    webpack入门笔记
    angular2.0学习笔记3.了解angular2.0项目结构
    angular2.0学习笔记2.创建hello world项目
    UVA 10954 Add All
    POJ 3069 Saruman's Army
  • 原文地址:https://www.cnblogs.com/jllj/p/6410625.html
Copyright © 2011-2022 走看看