关于java中继承有关的知识点

谈到java中的继承。很多小伙伴们太熟悉不过了,但是在这里小编想和大家一起分享一下继承中的工作原理:

首先创建一个动物父类

package com.imooc.blog;
/**
 * 首先创建一个Animal父类
 * @author daitianle
 *
 */
public class Animal {
	/*
	 * 定义其属性
	 */
	public String name;
	public int age;
	/*
	 * 无参构造方法
	 */
	public Animal(){
		System.out.println("这是动物类的无参构造方法哦!");
	}
	/*
	 * 定义其方法
	 */
	public void animalEat(){
		System.out.println("动物具有吃的本能!");
	}
}

然后创建一个子类Dog类:

package com.imooc.blog;

/**
 * 创建一个Dog类,并继承父类Animal
 * @author admin
 *
 */
public class Dog extends Animal {
	//首先在这里什么也不写
}

然后创建一个测试类:

package com.imooc.blog;

/**
 * 创建一个测试类
 * @author daitianle
 *
 */
public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//创建子类对象
		Dog dog=new Dog();
	}

}

执行程序结果为:这是动物类的无参构造方法哦!

很显然,我们在测试类只创建了子类对象,但是子类里面什么也没有写,为什么会输出“这是动物类的无参构造方法哦!”呢?

当然部分小伙伴会说。因为我们继承了父类啊!那么问题来了,父类里面有两个方法啊,为什么就是执行了一个呢?当然聪明的小伙伴又来了,因为在继承中子类创建对象时,默认先执行父类的无参构造方法啊!然后再执行子类的构造方法。很对

那么小编今天遇到一个错误就是这样的,在父类中只有一个有参的构造方法,这时我在创建子类对象时会发现报错了!!!

如下:

package com.imooc.blog;
/**
 * 首先创建一个Animal父类
 * @author daitianle
 *
 */
public class Animal {
	/*
	 * 定义其属性
	 */
	public String name;
	public int age;
	/*
	 * 无参构造方法
	 */
	public Animal(String name,int age){
		this.name=name;
		this.age=age;
		System.out.println("我是动物类,我叫:"+name+","+"我的今年"+age+"岁!");
	}
	/*
	 * 定义其方法
	 */
	public void animalEat(){
		System.out.println("动物具有吃的本能!");
	}
}

此时,Dog类便会报错,提示父类没有默认的无参构造方法,

package com.imooc.blog;

/**
 * 创建一个Dog类,并继承父类Animal
 * @author admin
 *
 */
public class Dog extends Animal {
	//首先在这里什么也不写
	public Dog(){
		
	}
}

然后小伙伴们第一想法就是在,父类里面加一个无参的构造方法就完事了。说得非常好,但是小编想说的是另外一种方法:

继承关系中子类中的方法必须调用父类的构造方法。如果父类中只有一个有参的构造方法,在子类的构造方法必须调用,而且是子类的构造方法第一句话必须是调用父类的有参构造方法,否则编译器会提示错误的。如果父类中有无参的构造方法,没有写的话,会自动调用的,也就不会报错

如下:

package com.imooc.blog;

/**
 * 创建一个Dog类,并继承父类Animal
 * @author admin
 *
 */
public class Dog extends Animal {
	//首先在这里什么也不写
	public Dog(){
		super("汪星人",88);
	}
}

这样便也不会报错,当然要注意super此时必须写在方法第一行的位置!!!

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值