java笔记_继承(八)

本文详细介绍了Java中的继承概念,包括继承的好处、单继承与多继承的区别、继承体系、成员变量和构造函数的特点,以及重写、final关键字、抽象类、接口、多态、内部类、包与权限和枚举类型的使用。通过实例解析了继承在实际编程中的应用和注意事项。
摘要由CSDN通过智能技术生成

8.1继承概述

class Student{
   
    String name;
    int age;
    void study(){
   
        System.out.println("Study...");
    }
}
class Worker{
   
 String name;
    int age;
    void work(){
   
        System.out.println("work...");
    }
}

以上可以看到的是,多个事物之间由共同的属性或行为,这种代码复用性很差,怎么办?可以将多个事物之间重复性的属性或者行为进行抽取,抽取出来之后放在另一个单独的类里面即可

class Student{
   
    void study(){
   
        System.out.println("Study...");
    }
}
class Worker{
   
    void work(){
   
        System.out.println("work...");
    }
}
class Teacher{
   
   void teach(){
   
       System.out.println("teach...");
   }
}
class Person{
   
   String name;
   int age;
}

虽然我们将Person类抽取出来,但是目前Worker和Student和Teacher与Person有无关系?没有。 如何让类之间产生这种父(Person)子(Worker Student Teacher)的关系,用extends关键字

class Student extends Person{
   
    void study(){
   
        System.out.println("Study...");
    }
}
class Worker extends Person{
   
    void work(){
   
        System.out.println("work...");
    }
}
class Teacher extends Person{
   
   void teach(){
   
       System.out.println("teach...");
   }
}
class Person{
   
   String name;
   int age;
}

总结一句:把多个事物重重复性的内容进行抽取,并生成另一个类,该类就是其他类的父亲,其他类之为子类,子类与父类之间用extends关键字来标明
继承的好处

  • 继承的出现提高了代码的复用性
  • 继承的出现让类与类之间产生关系,也为我们后面多态提供了前提
    单继承与多继承
  • 在现实生活中,父与子一对多关系,子与父一对一
  • 使用继承时,除了要考虑类与类之间重复的内容之外,更重要的是取考虑关系,必须是一种 is a 关系
  • 即XXX是YYY的一种!苹果是水果的一种,狗是动物的一种
  • Java 中类与类之间只能支持单继承,接口与接口之间可以支持多继承
class Demo extends Demo1{
   }
class Demo extends Demo1.Demo2{
   }//Error

继承体系
既然有了单继承,也有了父子关系,爷孙关系,曾祖父-重孙,继承出现了层级,继承体系

class A{
   }
class B extends A{
   }
class C extends A{
   }
class D extends A{
   }
......

需要注意的一些问题

  • 继承和传统稍微理解有一些不同的,子类并不是或是父类的一个子集!实际上,一个子类通常比它的父类包含更多的信息和方法。(子类更多的是父类的一种升级和延申)
  • 父类中的一些私有内容,子类是获取不到的。如果父类对其自身的私有内容设置的公共的访问器和修改器的话,子类可以通过访问该访问器和修改器来获取父类的私有内容。
  • 不要为了获取某一个特殊的属性或行为,而去乱认爸爸
  • 说来说去,总之就是想表达一个观点,在设计类和其继承关系时,一定要符合社会常识认知伦
    理问题
class Bird{
   
    void fly(){
   }
}
class Person extends Bird{
   }//不合适,不符合现实逻辑关系

子父类中,成员变量的关系

public class Sample{
   
    public static void main(String[] args){
   
        Zi zi = new Zi();
        System.out.println(zi.num);
    }
}
class Fu{
   
   int num = 10;
}
class Zi extends Fu{
   
}

子类没有,父类有且非私有,子类对象能获取num

public class Sample{
   
    public static void main(String[] args){
   
        Zi zi = new Zi();
        System.out.println(zi.num);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值