继承 extends

继承 extends

继承的关系 子类和父类
如子类为讲师和助教 父类为员工,父类包含子类的某些属性
格式

/*父类的格式
public class 父类名称{

}*/

public class Fu {

	int num=20;
	public void methFu() {
		System.out.println("父类方法执行了");
	}
}

/*子类的格式
public class 子类名称 extends{
//..
}*/

public class Zi extends Fu{

	int num=4;
	public void methZi() {
		System.out.println("子类方法执行");
	}
	
}
//main函数
public class hash {

	public static void main(String[] asgs)
	{

		Fu fu=new Fu();
		Zi zi=new Zi();
		System.out.println(fu.num);
		System.out.println(zi.num);
		zi.methZi();
		zi.methFu();
		fu.methFu();
	}
}
//运行结果:
/*20
4
子类方法执行
父类方法执行了
父类方法执行了
*/

子类可以访问父类,父类不能访问子类。父亲不知道儿子是谁,儿子知道父亲是谁
在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式:

  1. 直接通过子类对象访问成员变量:
    等号左边是谁, 就优先用谁,没有则向上找。
  2. 间接通过成员方法访问成员变量:
    该方法属于谁,就优先用谁,没有则向上找。

区分方法重名的方法

变量使用方法
局部变量:直接写
本类的成员变量:this.成员变量名
父类的成员变量:super.成员变量名

这三者重名

//Fu
package demo02;

public class Fu {

	int num=10;
}
//Zi
package demo02;

public class Zi extends Fu{
	int num=20;
	public void method() {
		int num =30;
	System.out.println(num);//直接写 方法成员变量
	System.out.println(this.num);//本类  类的成员变量
	System.out.println(super.num);//父类  父类的成员变量
	}
}
主程序
package demo02;

public class ExtendsFild {
public static void main(String[] asgs) {
	Zi zi= new Zi();
	zi.method();
}
}

运行结果
30
20
10

结果说明了:

继承中方法的覆盖重写

方法覆盖重写的注意事项:

  1. 必须保证父子类之间方法的名称相同,参数列表也相同。
    @Override:写在方法前面,用来检测是不是有效的正确覆盖重写。
    这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。

  2. 子类方法的返回值必须小于等于父类方法的返回值范围。
    String
    前提: java. lang. object类是所有类的公共最高父类(祖宗类),java. lang. String就是object的子类。

  3. 子类方法的权限必须大于等于父类方法的权限修饰符.
    提示:public>protected>(default)—什么都不写 >private

继承特点:

  1. 子类构造方法中有一个隐含的"super();"调用所以先调用的父类后调用的子类.
  2. 可以通过super关键字在子类构造调用父类重载构造.
下面是一个使用继承extends关键字的Java代码编写例子: ```java // 定义一个父Animal class Animal { protected String name; public Animal(String name) { this.name = name; } public void eat() { System.out.println(name + "正在吃东西"); } } // 定义一个子Cat,继承自Animal class Cat extends Animal { public Cat(String name) { super(name); } public void meow() { System.out.println(name + "正在喵喵叫"); } } // 定义一个子Dog,继承自Animal class Dog extends Animal { public Dog(String name) { super(name); } public void bark() { System.out.println(name + "正在汪汪叫"); } } // 主函数入口 public class Main { public static void main(String[] args) { Cat cat = new Cat("Tom"); cat.eat(); // 输出:Tom正在吃东西 cat.meow(); // 输出:Tom正在喵喵叫 Dog dog = new Dog("Jerry"); dog.eat(); // 输出:Jerry正在吃东西 dog.bark(); // 输出:Jerry正在汪汪叫 } } ``` 在上面的例子中,我们定义了一个父Animal和两个子Cat和Dog。子Cat和Dog继承了父Animal的属性和方法,通过extends关键字实现了继承。子可以覆盖父的方法,同时还可以定义自己特有的方法。通过继承和多态性,我们可以实现代码的复用和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java_extends相关,继承,为什么接口可以多继承](https://blog.csdn.net/monicateacat/article/details/131084257)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java 面向对象编程(二)——继承extends关键字,protected修饰符,super关键字](https://blog.csdn.net/weixin_50080344/article/details/124484748)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值