15.继承

1.基本概念

继承是面向对象的三大特征之一,继承可以解决编程中代码冗余的问题,是实现代码重用的重要手段之一。

继承是软件可重用的一种表现,新类可以在不增加自身代码的情况下,通过从现有的类中继承其属性和方法,来充实自身内容,这种现象或者行为就称为继承。此时,新类称为子类,现有的类称为父类。

继承最基本的作用就是使代码可重用,增加软件的可扩充性。

2.如何使用继承

1.编写父类

将不同类中的重复的属性和方法统一写在一个类中,这个类就是父类。

访问修饰符   class  父类名{

        共有的属性和方法

}

2.编写子类

使用继承关键字extends,在子类中只需要编写这个类特有的属性和方法即可。

访问修饰符  class 子类名 extends 父类名{

        子类特有的属性和方法

}

: Java中只支持单根继承,即每个子类只能有一个直接父类。

代码举例说明:

//编写父类Animal类
public class Animal {
	private String name;
	private int health;
	private int love;

	public Animal() {

	}
	public Animal(String name, int health, int love) {
		this.name = name;
		this.health = health;
		this.love = love;
	}
	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.getName()+" "+"健康值:"+this.getHealth()+" "+"亲密度:"+this.getLove());
	}
}
//编写子类Dog,通过关键字extends继承父类Animal类
public class Dog extends Animal {
	// 声明品种属性,这个属性是Dog类特有的
	private String strain;

	public Dog() {
		super();// 表示调用父类Animal类的无参构造方法
	}

	public Dog(String name, int health, int love, String strain) {
		super(name, health, love);//表示调用父类Animal类中的有参构造方法
		this.strain = strain;
	}

	public String getStrain() {
		return strain;
	}

	public void setStrain(String strain) {
		this.strain = strain;
	}
	//eat()方法,Dog类特有的方法
	public void eat(){
		System.out.println("狗喜欢吃骨头");
	}
}
//编写子类Penguin类,继承父类Animal类
public class Penguin extends Animal {
	
	// Penguin类特有属性
	private String sex;

	// 无参构造方法
	public Penguin() {
		super();
	}

	// 有参构造方法
	public Penguin(String name, int health, int love, String sex) {
		super(name, health, love);
		this.sex = sex;
	}

	//sex读写方法
	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
	
	//Penguin类特有方法
	public void swimming(){
		System.out.println("企鹅会游泳");
	}
}
//测试
public class Test {

	public static void main(String[] args) {
		Dog dog1=new Dog();
		//name  health  love属性都是父类Animal类中的,子类Dog类继承了这些属性
		dog1.setName("旺财");
		dog1.setHealth(80);
		dog1.setLove(99);
		//print()方法是父类Animal类中的
		dog1.print();
		//eat()方法是子类Dog类中的
		dog1.eat();
		
		Penguin p1=new Penguin("qq", 90, 98, "公");
		p1.print();
		p1.swimming();
	}

}

继承原则:

在java中,子类可以从父类中继承以下内容:

1.可以继承public和protected修饰的属性和方法,不论子类和父类是否在同一个包中;

2.可以继承默认访问修饰符修饰的属性和方法,但是子类和父类必须在同一个包中;

3.无法继承父类的构造方法。

3.super关键字

子类访问父类成员,使用super关键字,super代表父类对象

访问父类构造方法:

                        super();//访问父类无参构造方法

                        super(参数列表);//访问父类有参构造方法

访问父类属性:

                        super.属性名;

访问父类方法:

                        super.父类方法名();

注:

super只能出现在子类的方法和构造方法中;

super调用构造方法时,智能是第一句;

super不能访问父类的private成员。

4.方法重写

当父类中的方法不能满足子类使用的时候,我们可以在子类中重新定义一个与父类方法同名的方法,这个过程称之为方法重写。

说明:

子类根据需求对从父类继承的方法进行重新编写;

重写时,可以用super.方法的方式来保留父类的方法;

构造方法不能被重写。

方法重写规则

1.方法名相同
2.参数列表相同
3.返回值类型相同或者是其子类
4.访问权限不能严于父类
5.父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法
6.子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法(注:静态方法中无法使用super)
7.父类的私有方法不能被子类覆盖
8.不能抛出比父类方法更多的异常

 方法重写VS方法重载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值