继承的讲解(拉胯)

本文探讨了Java中继承的概念,如何通过`extends`关键字实现子类对父类的扩展,以及代码复用的重要性。讲解了子类与父类的关系、构造方法的特殊性、抽象类与抽象方法的应用,以及方法重写和重载的规则。同时涉及final修饰符的作用。
摘要由CSDN通过智能技术生成

继承

父类是重复的部分,也就是几个类公共的属性和方法
子类是不重复的部分,也就是除了这个类别的类没有的属性和方

子类和父类的关系:
	子类与父类是is-a关系,也就是子类是一个父类
	其实意思就是和狗是一个宠物的意思一样的
子类和父类:
	子类只能有一个父类
	但是一个父类可以有很多个子类

如何使用继承

/*父类*/
public class Pet {
    //属性
    private String name;
    private int health;
    private int love;
    //方法

    //get和set方法
    public String getName() {
        return name;
    }

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

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }

    //展示信息的方法
    public void print(){
        System.out.println("姓名:"+this.name);
        System.out.println("健康值:"+this.health);
        System.out.println("亲密度:"+this.love);
    }
}
/*第一个子类*/
public class Dog extends Pet{
    //属性
    private String strain;

    public String getStrain() {
        return strain;
    }

    public void setStrain(String strain) {
        this.strain = strain;
    }
}
/*第二个子类*/
public class Cat extends Pet{
    //属性
    private String sex;

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}
/*测试类*/
public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("小冉");
        dog.setHealth(100);
        dog.setLove(90);
        dog.print();

        Cat cat = new Cat();
        cat.setName("xiaoRan");
        cat.setHealth(99);
        cat.setLove(89);
        cat.print();
    }
}

在子类继承父类的时候要在类后边加上extends 父类的类名

例如:
	public class Cat extends Pet{
	/*
 	* extends:继承(得到父类的属性和方法)
 	* 代码的复用
 	* */
	}

理解继承

使用super关键字,super代表父类对象

子类访问调用父类成员
	//访问父类构造方法
	super();
	super(name);
/*要注意:访问父类构造方法要在子类构造方法中调用并且必须是是第一句*/
	//访问父类属性
	super.name;
	//访问父类方法
	super.print();

不能被继承的父类成员

  1. private成员
  2. 子类与父类不在同包,使用默认访问权限的成员
  3. 构造方法

访问修饰符全部

访问修饰符总结本类同包子类其他
private
默认(friendly)
protected
public

多重继承关系的初始化顺序是怎样的?

  • 父类的属性
  • 父类的构造方法
  • 子类属性
  • 子类构造方法

何时使用继承

  • 继承与真实世界类似
    1.只要说“猫是哺乳动物”,猫的很多属性,行为就不言自明了
    2.藏獒是一种狗
  • 继承是代码重用的一种方式

将子类共有的属性和行为放到父类中

使用继承有什么好处呢?

减少代码量,帮助程序快速的设计出来更有效的,维护较强的,安全性较高的代码

重写和重载

构造方法不能被重写,因为构造方法都不能继承

方法重写的规则:
	方向名相同
	参数列表相同
	返回值类型相同或者是其子类
	访问权限不能严于父类

方法的重写和方法的重载

位置方法名参数表返回值访问修饰符
方法重写子类相同相同相同或是其子类不能比父类更严格
方法重载同类相同相同无关无关

super

  1. super只能出现在子类的方法和构造方法中
  2. super调用构造方法时,只能是第一句
  3. super不能访问父类的private成员

抽象类和抽象方法

实例化父类没有意义,Java中使用抽象类,限制实例化

abstract 也可用于方法——抽象方法

  1. 抽象方法没有方法体
 public abstract void print();
  1. 抽象方法必须在抽象类里
  2. 抽象方法必须在子类中被实现,除非子类是抽象类

继承总结

复合is-a关系
使用extends关键字
代码复用

方法重写的规则

方法名相同
参数列表相同
返回值类型相同或者是其子类
访问权限不能严于父类

super关键字

super只能出现在子类的方法和构造方法中
super调用构造方法是,只能是第一句
super不能访问父类的private成员

抽象类和抽象方法

抽象类不能被实例化
抽象类可以有0~多个抽象方法
非抽象子类必须重写父类的所有抽象方法

final修饰符

修饰的类,不能再被继承
修饰的方法,不能被子类重写
修饰的变量将变成常量,只能在初始化时进行赋值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值