zoukankan      html  css  js  c++  java
  • Java继承

    1.1 类与类之间的关系

    A:继承(extends)

    * 让类与类之间产生关系,子父类关系

    * 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

    特点:子类具有父类的所有属性和方法,并拥有自己的独有的属性和行为。

    B:继承案例演示:

    * 动物类,猫类,狗类

    * 定义两个属性(颜色,腿的个数)两个功能(吃饭,睡觉)

    代码:

    public class Demo1_extends {
    public static void main(String[] args) {
    Dog dog = new Dog();
    dog.eat();
    dog.sleep();
    }
    }

    /**
    * 1.创建动物类,也就是父类
    * 2.属性:动物的颜色,腿的的个数
    * 3. 方法:吃饭,睡觉
    */
    class Animal{
    String color;
    int leg;

    public void eat(){
    System.out.println("正在吃");
    }

    public void sleep(){
    System.out.println("睡觉");
    }
    }


    class Cat extends Animal{

    }

    class Dog extends Animal {

    }

    1.2继承的类型

    Java不支持多继承,但是支持多重继承

    继承的特性:

      1.子类拥有父类非private的成员属性、成员方法(不继承父类的构造方法)。

       2.子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

       3.子类可以用自己的方式实现父类的方法。

      4.Java 的继承是单继承,但是可以多重继承。

      5.提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密, 代码独立性越差)。

    1.2继承的好处与弊端

    * A:继承的好处

    * a:提高了代码的复用性

    * b:提高了代码的维护性

    * c:让类与类之间产生了关系,是多态的前提

    * B:继承的弊端

      * 类的耦合性增强了。

      * 开发的原则:高内聚,低耦合。

      * 耦合:类与类的关系

      * 内聚:就是自己完成某件事情的能力

    1.3 Java中类的继承特点

    * A:Java中类的继承特点

    * a:Java只支持单继承,不支持多继承。(一个儿子只能有一个爹)

    * 有些语言是支持多继承,格式:extends 类1,类2,...

    * b:Java支持多层继承(继承体系)

    * B:案例演示

    * Java中类的继承特点

    * 如果想用这个体系的所有功能用最底层的类创建对象

    * 如果想看这个体系的共性功能,看最顶层的类

    代码:

    
    
    public class Demo2_extends {
    public static void main(String[] args) {
    Demo3 demo3 = new Demo3();
    demo3.print();
    demo3.method();
    demo3.show();
    System.out.println("----------------------");

    Demo1 demo1 = new Demo1();
    demo1.show();

    }
    }
    class Demo1 {
    public void show(){
    System.out.println("Demo1");
    }
    }

    class Demo2 extends Demo1{
    public void method(){
    System.out.println("Demo2");
    }
    }

    class Demo3 extends Demo2{ // 包含了最多功能
    public void print(){
    System.out.println("Demo3");
    }
    }
    
    

    1.4 Java中继承的注意事项

    * A:继承的注意事项

    * a:子类只能继承父类所有非私有的成员(成员方法和成员变量)

    * b:子类不能继承父类的构造方法,但是可以通过super(马上讲)关键字去访问父类构造方法。

    * c:不要为了部分功能而去继承

    * 项目经理 姓名 工号 工资 奖金

    * 程序员 姓名 工号 工资

    * B:什么时候使用继承

    * 继承其实体现的是一种关系:"is a"。

    Person

    Student

    Teacher

    水果

    苹果

    香蕉

    橘子

     

    采用假设法。

    如果有两个类A,B。只有他们符合A是B的一种,或者B是A的一种,就可以考虑使用继承。

    代码:
    public class Demo3_extends {
    public static void main(String[] args) {

    Programmer p = new Programmer();
    p.setEno("1001");
    p.setName("程序员");
    p.setSalary(10000);
    System.out.println(p.getEno() +"...." + p.getName() + "...." + p.getSalary());
    System.out.println("++++++++++++");
    ProjectManager pro = new ProjectManager();
    pro.setEno("0001");
    pro.setName("项目经理");
    pro.setSalary(20000);
    pro.setBonus(5000);
    System.out.println(pro.getEno() +"...." + pro.getName() + "...." +
    pro.getSalary() + "...." + pro.getBonus());

    }
    }
    class Person{
    private String name; // 员工的姓名
    private String eno; // 员工的编号
    private double salary; // 员工的工资

    // 无参数的构造方法
    public Person(){

    }
    // 有参数的构造方法
    public Person(String name, String eno, double salary){
    this.name = name;
    this.eno = eno;
    this.salary = salary;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public String getEno() {
    return eno;
    }

    public void setEno(String eno) {
    this.eno = eno;
    }

    public double getSalary() {
    return salary;
    }

    public void setSalary(double salary) {
    this.salary = salary;
    }
    }

    class Programmer extends Person{

    }

    class ProjectManager extends Person{
    private double bonus;

    public double getBonus() {
    return bonus;
    }

    public void setBonus(double bonus) {
    this.bonus = bonus;
    }
    }
    
    

    1.5继承中成员变量的关系

    * A:案例演示

    * a:不同名的变量

    * b:同名的变量

    子父类出现同名的变量只是在讲课中举例子用,在开发中是不会出现这种情况的
    子类继承父类就是为了使用父类的成员,那么如果定义了同名的成员变量没有意义了
    
    

    2.1 继承中构造方法的关系

    * A:案例演示
        * 子类中所有的构造方法默认都会访问父类中空参数的构造方法
    * B:为什么呢?
        * 因为子类会继承父类中的数据,可能还会使用父类的数据。
        * 所以,子类初始化之前,一定要先完成父类数据的初始化。
        * 其实:
       * 每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。

    代码:
    public class Demo5_Extends {
    public static void main(String[] args) {
    /**
    * 1. 创建对象时,构造方法会自动执行
    * 2. 创建的是子类的对象,但是父类的构造方法先执行了。
    */
    Son2 son2 = new Son2();
    }
    }

    class Father2 {
    String name;
    public Father2() {
    System.out.println("Father 的构造方法");
    }
    }
    class Son2 extends Father2 {
    public Son2() {
    System.out.println("Son 的构造方法");
    }
    }
    
    

    2.2继承中构造方法的注意事项

    * A:案例演示

    * 父类没有无参构造方法,子类怎么办?

    * super解决

    * this解决

    * B:注意事项

    * super(…)或者this(….)必须出现在构造方法的第一条语句上

    代码:
    public class Demo6_Extends {
    public static void main(String[] args) {
    /**
    * 1. 创建一个子类的对象
    * 2. 调用子类的无参数的构造方法
    * 3. 调用super("张三"7)方法执行父类中有参数的构造方法
    * 4. 执行子类中的无参数的构造方法
    */
    SonOne s1 = new SonOne();
    System.out.println(s1.getName() + "..." + s1.getAge());
    System.out.println("--------------------");
    /**
    * 1. 调用子类的有参数的构造方法
    * 2. 调用super("李四"28)方法执行父类中有参数的构造方法
    * 3. 执行子类中有参数的构造方法
    */
    SonOne s2 = new SonOne("李四",28);
    System.out.println(s2.getName() + "..." + s2.getAge());
    }
    }

    class FatherOne{
    private String name; // 姓名
    private int age; // 年龄
    /*
    // 无参数的构造方法
    public FatherOne() {
    System.out.println("FatherOne: 空参构造方法");

    }*/

    // 有参数的构造方法
    public FatherOne(String name, int age){
    this.name = name;
    this.age = age;
    System.out.println("FatherOne: 有参数的构造方法");
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public int getAge() {
    return age;
    }

    public void setAge(int age) {
    this.age = age;
    }
    }

    class SonOne extends FatherOne{
    public SonOne() { //空参构造
    super("张三", 7); //无论写没写super() 方法,这一句话都会执行
    System.out.println("Son 空参构造");
    }
    public SonOne(String name,int age) { //有参构造
    super(name,age);
    System.out.println("Son 有参构造");
    }

    }

    public class Demo6_Extends {
        public static void main(String[] args) {
            /**
             * 1. 创建一个子类的对象
             * 2. 调用子类的无参数的构造方法
             * 3. 调用super("张三" 7)方法执行父类中有参数的构造方法
             * 4. 执行子类中的无参数的构造方法
             */
            SonOne s1 = new SonOne();
            System.out.println(s1.getName() + "..." + s1.getAge());
            System.out.println("--------------------");
            /**
             * 1. 调用子类的有参数的构造方法
             * 2. 调用super("李四" 28)方法执行父类中有参数的构造方法
             * 3. 执行子类中有参数的构造方法
             */
            SonOne s2 = new SonOne("李四",28);
            System.out.println(s2.getName() + "..." + s2.getAge());
        }
    }

    class FatherOne{
        private String name;  // 姓名
        private int age;      // 年龄
        /*
        // 无参数的构造方法
        public FatherOne() {
            System.out.println("FatherOne: 空参构造方法");

        }*/

        // 有参数的构造方法
        public FatherOne(String name, int age){
            this.name = name;
            this.age = age;
            System.out.println("FatherOne: 有参数的构造方法");
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }

    class SonOne extends FatherOne{
        public SonOne() {                 //空参构造
            super("张三", 7);   //无论写没写super() 方法,这一句话都会执行
            System.out.println("Son 空参构造");
        }
        public SonOne(String name,int age) {   //有参构造
            super(name,age);
            System.out.println("Son 有参构造");
        }

    }

  • 相关阅读:
    图片音乐 上传、下载
    表格类型数据,Excel csv导入,导出操作
    逐行读取txt文件,分割,写入txt。。。上传,下载
    性能分析四
    性能分析三
    postman断言
    postman+Newman语法参数
    shell_03
    shell_02
    shell_01
  • 原文地址:https://www.cnblogs.com/LEPENGYANG/p/14990458.html
Copyright © 2011-2022 走看看