【Java基础】第七课:继承

一:概念

继承是面向对象的显著特征。继承是从现有的类中派生新的类,新的类能吸收已有的类的属性和行为,并且能扩展新的功能。Java继承是使用已存在的类的定义作为基础建立新类的技术,新的定义可以增加新的技术或者新的功能,也可以用父类的功能,但不能选择性的继承父类,超类,基类。这种使复用以前的代码非常容易,能够大大缩短开发周期,降低费用。提高复用性,只要继承父类,就有一样的功能。

特点:

1、 使用extends关键字

2、 相当于子类把父类的功能复制了一份

3、 java只支持单继承

4、 继承可以传递(爷爷,儿子,孙子的关系)

5、 不能继承父类的私有成员

6、 继承多用于功能的修改,子类可以拥有父类的功能的同时,进行功能拓展

7、 像是is a 的关系(强制依赖关系)

练习一:继承的特点

package cn.tedu.oop;

public class Test5_Extends {
	public static void main(String[] args) {
//		调用了父类的eat功能
		Dog d=new Dog();
		d.eat();
		//在父类中 private修饰的不能被子类继承 
//		System.out.println(d.ani);
		System.out.println(d.coin);
		//继承可以传递
		System.out.println(d.country);
	}
}
class Yete{
	String country="中国";
}
class Animal extends Yete{
	private String money;
	public String coin;
	public void eat() {
		System.out.println("动物吃");
	}
}
//继承用extend
class Dog extends Animal{
	
}
class Cat extends Animal{
	
}

结果:

 

二:super关键字

代表的是父类对象的一个引用,用来在子类中使用父类的功能,如果在构造方法中,super必须是第一条语句。

public class Test6_UseExtends {
	public static void main(String[] args) {
		Son s=new Son();
		System.out.println(s.skin);//1.使用了父类的
		s.sing();//2.2使用了子类扩展的功能
	}
}
class Fa{
	public String skin="yellow";
	int num=30;
	//当父类的变量名和子类的同名时
}
class Son extends Fa{
	//2.1子类自己扩展的功能
	int num=10;
	public void sing() {
		int num=2;
		System.out.println("子类爱唱歌");
		System.out.println(this.num);//3、使用了成员变量
		System.out.println(skin);//使用了父类中的属性
		System.out.println(super.num);//4、使用了父类的同名变量
	}
}

结果:

三:方法的重写

继承后,子类就拥有了父类的功能,那么子类就可以使用或者修改父类的方法。 子类中方法名与父类完全一样(包括方法的返回值,方法名和参数列表,完全一致)时,会发生覆盖/复写操作,相当于修改功能。

重写要求:继承关系+子类方法的声明(方法返回值 方法名 参数列表)必须和父类一样。

package cn.tedu.oop;

public class Test7_UseExtends2 {
	public static void main(String[] args) {
		Erzi er=new Erzi();
		//使用父类的方法
		er.like();
		//使用自己的方法
		er.eat();
		//重写后使用子类的方法
		er.like();
	}
}
class Baba{
	//1子类可以使用父类的方法
	public void like() {
		System.out.println("爸爸喜欢集邮");
	}
}
class Erzi extends Baba{
	//2子类可以由自己的特有的方法
	public void eat() {
		System.out.println("儿子喜欢吃西红柿");
	}
	//3子类可以修改父类的方法---重写
	public void like() {
		System.out.println("儿子喜欢唱歌");
	}
}

结果:

四:构造方法的使用

子类继承父类 当子类创建对象时 子类的默认构造方法中隐藏着父类的构造方法:1执行父类构造super()  2执行子类构造

如果父类没有无参构造,super();会报错。可以修改成有参的super("张大海");不过为了自己方便或者子类方便,在写父类时,记得写上无参构造。

练习:构造函数的使用

//继承中的构造方法
public class Test8_UseExtends {
	public static void main(String[] args) {
		Son2 son=new Son2();
	}
}
class Fa2{
	public Fa2() {
		System.out.println("父类");
	}
}
class Son2 extends Fa2{
	//当子类继承父类时 子类的默认构造方法中隐藏着父类的构造方法 1执行父类构造super()  2执行子类构造
	public Son2() {
		super();
		System.out.println("子类");
	}
}

结果:

this和super的区别:

1、 this代表本类对象的引用,super代表父类对象的引用。

2、 this用于区分局部变量和成员变量

3、 super用于区分本类变量和父类变量

4、 this.成员变量  this.成员方法()  this(【参数】)代表调用本类内容

5、 super.成员变量  super.成员方法()  super(【参数】),代表调用父类内容

6、 this和super不可以同时出现在同一个构造方法里,他们两个只要出现都得放在第一行,同时出现的话,会报错。

重写与重载的区别:

1、重载:是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同

2、重写:是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型

3、重写是父类与子类之间多态性的一种表现

4、重载是一类中多态性的一种表现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值