千峰Java教程:053. 继承小结

继承小结

  1. 继承发生在多个类之间
  2. 继承使用关键字extends
  3. JAVA只能单继承,允许多层继承
  4. 被继承的类叫父类(超类),继承父类的叫子类(派生类)
  5. 在父类中的私有属性和方法可以被子类继承
  6. protected(受保护的访问权限修饰符),修饰的属性或方法可以被子类继承
  7. 构造方法不能被继承
  8. 创建对象会调用构造方法,调用构造方法不一定就是创建对象
  9. 实例化子类对象,会先调用父类构造方法,如果父类中没有构造方法,那么子类必须显示的通过supur(...)来调用父类的带参构造方法,super(这个关键字可以理解为“父类”)也只能在子类构造方法的第一句
//第9点:
public class Demo1
{
	public static void main(String[] args)
	{
		HomeDog homeDog = new HomeDog();
		homeDog.print();
	}
}

class Dog
{
	protected String name;
	private String sex;
	public Dog(String name, String sex)
	{
		this.name = name;
		this.sex = sex;
		System.out.println("我是Dog的构造方法");
	}
	public void eat()
	{
		System.out.println("吃饭");
	}
}

class HomeDog extends Dog
{
	//类的定义;
	public void print()
	{
		System.out.println(name + "我是一只家狗,汪!");
	}
}

class HuskyDog extends Dog//HuskyDog:哈士奇狗
{
	//类的定义;
	public void show()
	{
		System.out.println(name + "我是一只Husky狗,我会作秀。");
	}
}

/*
结果(在Dog类中的构造方法里有两个参数,Dog类中没有无参的了,就会报错):
E:\Java\千峰教育\Demo1.java:26: 错误: 无法将类 Dog中的构造器 Dog应用到给定类型;
class HomeDog extends Dog
^
  需要: String,String
  找到: 没有参数
  原因: 实际参数列表和形式参数列表长度不同
E:\Java\千峰教育\Demo1.java:35: 错误: 无法将类 Dog中的构造器 Dog应用到给定类型;
class HuskyDog extends Dog//HuskyDog:哈士奇狗
^
  需要: String,String
  找到: 没有参数
  原因: 实际参数列表和形式参数列表长度不同
2 个错误
*/

现在无法给HomeDog类和HuskyDog类传参,这时候要在这两个子类中添加构造方法,跟父类的一样。

public class Demo1
{
	public static void main(String[] args)
	{
		HomeDog homeDog = new HomeDog("咯咯哒", "公");
		homeDog.print();
	}
}

class Dog
{
	protected String name;
	private String sex;
	public Dog(String name, String sex)
	{
		this.name = name;
		this.sex = sex;
		System.out.println("我是Dog的构造方法");
	}
	public void eat()
	{
		System.out.println("吃饭");
	}
}

class HomeDog extends Dog
{
	//类的定义;
	public HomeDog(String name, String sex)
	{
		super(name, sex);	//要写在构造方法的第一行
	}
	public void print()
	{
		System.out.println(name + "我是一只家狗,汪!");
	}
}

class HuskyDog extends Dog//HuskyDog:哈士奇狗
{
	//类的定义;
	public HuskyDog(String name, String sex)
	{
		super(name, sex);	//要写在构造方法的第一行
	}
	public void show()
	{
		System.out.println(name + "我是一只Husky狗,我会作秀。");
	}
}

/*
结果:
我是Dog的构造方法
咯咯哒我是一只家狗,汪!
*/

继承的好处:

1、提高代码的复用性

2、提高代码的维护性

3、让类鱼类之间产生关系。是多态的前提

继承的缺点:

增强了类鱼类之间的耦合性

开发原则:高内聚,低耦合

 

3、子类的实例化过程

在子类实例化操作的时候,首先会让其父类初始化操作。之后子类在自己进行实例化操作。

子类的实例化过程:

子类实例化时会先调用父类的构造方法,如果父类中没有默认的构造方法,在子类的构造方法中必须显示的调用父类的构造方法

结论:

构造方法只是用于初始化类中的字段以及执行一些初始代码,调用构造方法并不代表生成对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值