继承详细解析

继承

  • extends的意思是"扩展"。子类是父类的扩展

  • java中类只有单继承,没有多继承!

  • 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等

  • 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示。

  • 子类和父类之间,从意义上讲应该具有“is a”的关系

 package com.oop.demo05;
 ​
 public class Application {
     public static void main(String[] args) {
         Student student = new Student();
         student.say();
         System.out.println(student.getMoney());
     }
 }
 package com.oop.demo05;
 //Person 人:父类
 public class Person {
     //public
     //protected
     //default
     //private
     private int money = 10_0000_0000;//要用private得先封装
     public void say(){
         System.out.println("说了一句话");
     }
 ​
     public int getMoney() {
         return money;
     }
     public void setMoney(int money) {
         this.money = money;
     }
 }
 package com.oop.demo05;
 //学生 is 人: 派生类,子类
 //子类继承了父类,就会拥有父类的全部方法
 public class Student extends Person {
 ​
 }



 package com.oop.demo05;
 //Person 人:父类
 public class Person {
     protected  String name = "weita";
 }
 package com.oop.demo05;
 //学生 is 人: 派生类,子类
 //子类继承了父类,就会拥有父类的全部方法
 public class Student extends Person {
 ​
     private String name = "weitadanmo";
 ​
     public void test(String name){
         System.out.println(name);//为他淡漠
         System.out.println(this.name);//weitadanmo 输出类里面的东西
         System.out.println(super.name);//weita 输出父类
     }
 }
 package com.oop.demo05;
 ​
 public class Application {
     public static void main(String[] args) {
         Student student = new Student();
         student.test("为他淡漠");
     }
 }

super注意点:

 1. super调用父类的构造方法,必须在构造方法的第一个
  1. super必须只能出现在子类的方法或构造方法中!

  2. super 和this 不能同时调用构造器!

VS this:

  • 代表的对象不同:

    this:本身调用这个对象

    super:代表父类对象的应用

  • 前提

    this:没有继承也可以使用

    super:只能在继承条件才可以使用

  • 构造方法

    this():本类的构造

    super():父类的构造



 package com.oop.demo05;
 ​
 public class Application {
     //静态方法和非静态方法的区别很大
     //静态方法://方法的调用只和左边,定义的数据类型有关
     public static void main(String[] args) {
         A a = new A();
         a.test(); //A
 ​
         //父类的引用指向了子类
         B b = new A();
         b.test(); //B
     }
 }
 package com.oop.demo05;
 ​
 public class A extends B{
     public static void test() {
         System.out.println("A=>test()");
     }
 }
 package com.oop.demo05;
 //重写都是方法的重写,和属性无关
 public class B {
     public static void test(){
         System.out.println("B=>test()");
     }
 }

 package com.oop.demo05;
 //没有static时,b调用的是对象的方法,而b是用A类new的
 //有static时,b调用了B类的方法,因为b是用b类定义的
 //静态方法是类的方法,非静态是对象的方法
 public class Application {
     //非静态:重写
     public static void main(String[] args) {
         A a = new A();
         a.test(); //A
 ​
 ​
         //父类的引用指向了子类
         B b = new A();//子类重写了父类的方法
         b.test(); //A
     }
 }
 package com.oop.demo05;
 ​
 public class A extends B{
     //Override重写
     @Override//注解:有功能的注释
     public void test() {
         System.out.println("A=>test()");
     }
 }
 package com.oop.demo05;
 //重写都是方法的重写,和属性无关
 public class B {
     public void test(){
         System.out.println("B=>test()");
     }
 }

重写:需要有继承关系,子类重写父类的方法

  1. 方法名必须相同

  1. 参数列表列表必须相同

  2. 修饰符:范围可以扩大但不能缩小:public>protected>Default>private

  3. 抛出的异常:范围,可以被缩小,但不能扩大:ClassNotFoundException--->Exception(大)

重写子类方法和父类必须一致:方法体不同!

为什么需要重写:

  1. 父类的功能,子类不一定需要,或者不一定满足

Alt + Insert :override;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值