Java基础_继承

81 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第32天,点击查看活动详情

继承_继承的概念

  • 1.面向对象语言的三个特征:封装、继承、多态
  • 2.什么是继承:
    学员信息:
        属性(属性):
            学员编号
            学员姓名
            性别
            年龄
        行为(方法):
            吃饭
            睡觉
            学习
    教师信息:
        属性:
            员工编号
            姓名:
            性别:
            年龄
        行为:
            吃饭
            睡觉
            教课
    实现:
        class Person{//人员
            //1.成员属性
            String perNo;
            String name;
            char sex;
            int age;
            //2.成员方法
            public void eat(){//吃饭
            }
            public void sleep(){//睡觉
            }
        }
        class Student extends Person{
            //本类可以继承Person中的可以被继承的成员属性和方法
            public void study(){//学习
            }
        }
        class Teacher extends Person{
            public void teach(){//教课
            }
        }

当"面向对象设计"后,我们可以将一些"同一类别的类"中的"相同的成员属性"和"相同的成员方法"进一步提取出来,定义到一个新类中,然后让设计的这些类"继承"自这个类。这样这些类中就自动拥有了允许被"继承"的成员属性和成员方法,达到"代码重用"的目的。继承自其它类的类叫:子类。被继承的类叫:父类(基类、超类)。

继承_继承的定义及使用格式

1.继承的定义:
    class 子类名 extends 父类名{
    }
2.格式举例:
    class Person{
        String name;
        char sex;
    }
    class Student extends Person{

    }
    main(){
        Student stu = new Student();
        stu.name = "小红";
        stu.sex = '女';
    }

继承_继承的好处

  • 1.子类继承父类后,自动"拥有了"父类中允许被继承的成员属性和方法,就达到了:代码重用的目的;
  • 2.为多态提供了前提;

继承_继承后创建子类对象

class Person{
    String name;
    int age;
    char sex;
}
class Student extends Person{
}
main(){
    Student stu = new Student();//会先构造Person对象,并存储在Student对象空间内部
}

继承_Java中继承的特点1_单继承

1.单继承:一个类同时只能继承自一个父类。
    class Fu1{
        public void show(){
            System.out.println("a");
        }
    }
    class Fu2{
        public void show(){
            System.out.println("b");
        }
    }
    class Zi extends Fu1,Fu2{//错误的--如果继承多个父类,可能会造成"同名的方法冲突"
    }
    main(){
        Zi z = new Zi();
        z.show();//编译器不知道调用哪个方法
    }

继承_Java中继承的特点2_多级继承

1.多级继承:子继承父,父继承爷爷
    class A{
        public void show(){
            System.out.println("a");
        }
    }
    class B extends A{
        public void show(){//不是冲突,是:子类重写(覆盖)父类的方法
            System.out.println("b");
        }
    }
    class C extends B{}//类C会同时继承下B中的属性和方法,也会继承下A中的属性和方法

继承_Java中一个类可以有多个子类

  • 1.Java中一个父类可以有多个子类

      class Person{
      }
      class Student extends Person{
      }
      class Teacher extends Person{
      }
      class Employee extends Person{
      }
    
  • 2.Java中一个子类只能继承自一个父类。

继承_子类中访问父类成员的特点

  • 1.子类中可以继承父类中允许被继承的成员属性和成员方法;

  • 2.父类中的以下成员不能被继承:

      1).私有成员(成员属性、成员方法)
          public class Person {
              private String name;
              int age;
          }
          public class Student extends Person{
              public void show(){
              //    System.out.println("我的名字是:" + name);//编译错误,没有继承name
                  System.out.println("我的年龄是:" + age);
              }
          }
          public static void main(String[] args) {
              Student stu = new Student();
              stu.name = "章子怡";//编译错误,没有继承name属性
    
          }
      2).构造方法:
          class Person{
              public Person(){
                  System.out.println("a");
              }
          }
          class Student extends Person{
              public Student(String n){
                  System.out.println("b");
              }
          }
          main(){
              Student stu = new Student();//子类没有无参构造方法,而且不能继承父类的无参构造方法。
          }
          1.编译错误    (选择)
          2.运行时异常
          3.打印:a
          4.打印:ab
    

扩展_类和类之间的几种关系

  • 1."has a":有一个的关系:
    class Student{}
    class Teacher{}
    class Classroom{
        //有一名老师
        Teacher t = new Teacher();
        //有八十名学员
        Student[] stuArray = new Student[80];
        或者
        ArrayList<Student> stuList = new ArrayList<>();
    }

2."is a" : 是一个的关系,继承

class Person{
    Stirng name;
    char sex;
    int age;
}
class Student extends Person{}//Student是一个Person
class Teacher extends Person{}//Teachar是一个Person
class Cat extends Person{//逻辑上不符合要求,不应该继承
}
  • 3.组合关系:一个类的所有成员属性都是由其它类组成的,没有自己特有的属性:
    class CPU{}
    class 主板{}
    class 显卡{}
    class 硬盘{}
    ...
    class 电脑{
        CPU cpu = new CPU();
        主板 zb = new 主板();
        显卡 xk = new 显卡();
        硬盘 yp = new 硬盘();
        .....
    }
  • 4.依赖关系:
    class Student{
        public void show(){
            System.out.println("您好,我是传智播客的一名学员,我骄傲!!");
        }
    }
    class Teacher{
        public void talk(Student stu){//是一种很强的依赖关系,也叫:紧耦合
            stu.show();
        }
    }