美文网首页
第六章:面向对象高级——继承的基本实现。

第六章:面向对象高级——继承的基本实现。

作者: 孤意的学习笔记 | 来源:发表于2017-10-18 10:12 被阅读0次

    本章目标

    • 掌握继承的机泵概念及实现
    • 掌握继承实现的各种限制

    1、具体内容

    1.1、继承的基本概念

    在讲解集成的概念之前先来看以下的两个类:
    Person.java

    class Person{                   // 定义Person类
        private String name ;       // 定义name属性
        private int age ;           // 定义age属性
        public void setName(String name){
            this.name = name;   
        }
        public void setAge(int age){
            this.age = age ;
        }
        public String getName(){
            return this.name ;
        }
        public int getAge(){
            return this.age ;
        }
    };
    

    Student.java

    class Student{                  // 定义Student类
        private String name ;       // 定义name属性
        private int age ;           // 定义age属性
        private String school ;     // 定义school属性
        public void setName(String name){
            this.name = name;   
        }
        public void setAge(int age){
            this.age = age ;
        }
        public String getName(){
            return this.name ;
        }
        public int getAge(){
            return this.age ;
        }
        public void setSchool(String school){
            this.school = school ;
        }
        public String getSchool(){
            return this.school ;
        }
    };
    

    这两个类完成了,但是这两个类设计是否合理?
    Student类中有部分代码是和Person类是重复的,而且,学生是不是人?

    这段代码完全是按照之前讲解的最简单的概念实现,但是如果从实际的角度看,这种事先肯定不好。

    继承:子类继承父类,可以扩展已有类的功能。

    class Person{                   // 定义Person类
        private String name ;       // 定义name属性
        private int age ;           // 定义age属性
        public void setName(String name){
            this.name = name;   
        }
        public void setAge(int age){
            this.age = age ;
        }
        public String getName(){
            return this.name ;
        }
        public int getAge(){
            return this.age ;
        }
    };
    class Student extends Person{                   // 定义Student类
        // 此处不添加任何的代码
    };
    public class ExtDemo02{
        public static void main(String arsg[]){
            Student stu = new Student() ;// 实例化子类对象
            stu.setName("张三") ; // 此方法在Student类中没有明确定义
            stu.setAge(30) ;
            System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge() ) ;
        }
    };
    
    输出结果:
    姓名:张三,年龄:30
    

    可以把父类中的内容拿过啦在子类继续使用,这样一来,子类如果有一些重复的方法,就不用重新定义了。

    extends关键字:称为扩展,子类扩展一个类,子类有时候也称为派生类。

    class Person{                   // 定义Person类
        private String name ;       // 定义name属性
        private int age ;           // 定义age属性
        public void setName(String name){
            this.name = name;   
        }
        public void setAge(int age){
            this.age = age ;
        }
        public String getName(){
            return this.name ;
        }
        public int getAge(){
            return this.age ;
        }
    };
    class Student extends Person{                   // 定义Student类
        private String school ;     // 定义school属性
        public void setSchool(String school){
            this.school = school ;
        }
        public String getSchool(){
            return this.school ;
        }
    
    };
    public class ExtDemo03{
        public static void main(String arsg[]){
            Student stu = new Student() ;// 实例化子类对象
            stu.setName("张三") ; // 此方法在Student类中没有明确定义
            stu.setAge(30) ;
            stu.setSchool("清华大学") ;
            System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge() + ",学校:" + stu.getSchool() ) ;
        }
    };
    
    输出结果:
    姓名:张三,年龄:30,学校:清华大学
    

    子类已经扩充了已有的功能。

    1.2、继承的限制


    单继承:一个孩子只能有一个亲爸。
    class A{
    };
    class B{
    };
    class C extends A,B{    // 错误,同时继承了两个父类
    };
    

    编译出错。

    注意:不能多重继承,但是允许多层继承。

    class A{
    };
    class B extends A{
    };
    class C extends B{
    };
    

    3.3、类图的关系表示图

    3.4、访问限制

    例如:

    class Person{                   // 定义Person类
        private String name ;       // 定义name属性
        private int age ;           // 定义age属性
        public void setName(String name){
            this.name = name;   
        }
        public void setAge(int age){
            this.age = age ;
        }
        public String getName(){
            return this.name ;
        }
        public int getAge(){
            return this.age ;
        }
    };
    class Student extends Person{                   // 定义Student类
        public void fun(){
            System.out.println("父类中的name属性:" + name) ;  // 错误,无法访问
            System.out.println("父类中的age属性:" + age) ;    // 错误,无法访问
        }
    };
    

    编译出错。

    换种访问,通过getter或setter

    class Person{                   // 定义Person类
        private String name ;       // 定义name属性
        private int age ;           // 定义age属性
        public void setName(String name){
            this.name = name;   
        }
        public void setAge(int age){
            this.age = age ;
        }
        public String getName(){
            return this.name ;
        }
        public int getAge(){
            return this.age ;
        }
    };
    class Student extends Person{                   // 定义Student类
        public void fun(){
            System.out.println("父类中的name属性:" + getName()) ; // 正确,间接访问
            System.out.println("父类中的age属性:" + getAge()) ;   // 正确,间接访问
        }
    
    };
    

    编译通过。

    2、总结

    1、继承的主要目的:扩展类的功能
    2、Java中一个子类只能继承一个父类
    3、Java中不允许多重继承,但是允许多层继承

    相关文章

      网友评论

          本文标题:第六章:面向对象高级——继承的基本实现。

          本文链接:https://www.haomeiwen.com/subject/dbrsuxtx.html