类的关系——继承

继承

继承的概念:
继承是从已有的类派生出新的类,新的类能吸收已有类的数据属性和行为,并扩展新的能力,继承使用的关键字是extends

1.类的继承格式:
class 父类{}

public class Animal {
    public void eat(){
        System.out.println("动物的吃饭方法");
    }
    public void sleep(){
        System.out.println("动物的睡觉");
    }
}

class 子类 extends 父类{}

public class Person extends Animal {
    //重写了Animal的eat()方法
    @Override
    public void eat() {
        System.out.println("人类的吃饭");
    }
    //Person类独有的方法
    public void study(){
        System.out.println("人类会学习");
    }
}

2.子类的对象可以调用父类中的(public、protected)属性和方法 当做自己的来使用

public static void main(String[] args) {
        Person person=new Person();
        person.sleep();
    }
}

运行结果:

动物的睡觉

Process finished with exit code 0

3.子类可以添加自己独有的属性和方法

 //Person类独有的方法
    public void study(){
        System.out.println("人类会学习");
    }
    public static void main(String[] args) {
        Person person=new Person();
        person.study();
    }
}

运行结果:

人类会学习

Process finished with exit code 0

*4.子类从父类中继承过来的方法有的不能满足子类的需要,可以在子类中覆写(Override)父类的方法

//重写了Animal的eat()方法
    @Override
    public void eat() {
        System.out.println("人类的吃饭");
    }
    public static void main(String[] args) {
        Person person=new Person();
        person.eat();
    }

运行结果:

人类的吃饭,讲究色香味俱全

Process finished with exit code 0

(1)、权限: 子类的访问权限可以大于等于父类,父类是protected,子类可以是public,但是子类的访问权限不能小于父类。
(2)、特征:fina static abstract
父类方法是final的,子类不能重写
父类方法是static 子类不存在 因为static是属于类的,与类静态绑定,子类不能重写。
父类方法时abstract 子类必须重写(如果子类时抽象类,可以不重写)
(3)、返回值: 子类可以小于父类
(4)、名字:子类方法的名字必须与父类一致
(6)、参数:子类与父类一致
(7)、异常:如果父类方法抛出运行时异常,子类可以不予理会
如果父类抛出的是编译时异常,子类抛出异常的个数、类型都要小于等于父类
(8)、方法体:子类与父类方法内容不一致 ,每一个重写方法过程不一致
5.每一个类都有继承类,如果不写extends关键字,默认继承Object,如果写了extends则继承后面那个父类,可以理解为Object类非常重要,是一个应用类型的父类(直接或者间接的继承Object)Object没有父类
6.Java中继承是单个存在的(单继承)每一个类只能有一个继承类(在extends后面只能写一个类)可以通过传递的方式实现多继承的效果,例如,Animal类继承了Object类,Person类继承了Animal类,所以Person间接继承了Object类,可以使用Object中的一般方法和属性。

public static void main(String[] args) {
        Person person=new Person();
        
        //Person默认继承了Object类,可以使用Object中的方法
        person.equals();
        person.hashCode();
        person.toString();
    }

*7.关于this和super的使用:
如果子类没有写构造方法,默认执行父类的无参数构造方法

public class Animal {
    Animal(){
        System.out.println("父类中的无参数构造方法");
    }
    public class Person extends Animal {
    }
     public static void main(String[] args) {
        Person person = new Person();

    }
    

运行结果:

父类中的无参数构造方法

Process finished with exit code 0

如果子类写了构造方法,先执行父类无参数构造方法,再执行子类的构造方法,因为父类的无参数构造方法(super())隐藏在子类构造方法的第一行,所以执行时,首先执行父类的构造方法。

public class Person extends Animal {
    Person(){
        //super();隐藏在第一行,首先执行
        System.out.println("子类的无参数的构造方法");
    }
    
public static void main(String[] args) {
        Person person = new Person();

    }
    
 

运行结果:

父类中的无参数构造方法
子类的无参数的构造方法

Process finished with exit code 0

this和super都是指代词 代替的是对象
this代替的是当前执行方法时的那个对象,不一定指的是当前类的
super代替的是当前执行方法时的对象的父类对象
都能调用一般属性和一般方法
可以放置在类成员的任意位置(属性 方法 构造方法 块)
*注:调用一般方法的时候可以来回调用 ,执行时可能产生问题
可以调用构造方法(放在构造方法的第一行),this和super在构造方法中调用另一个类的构造方法不能同时出现在第一行,构造方法之间不能来回调用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值