java基础---继承

本文深入讲解Java中的继承机制,包括单继承与多层继承的区别、如何正确使用super关键字、子类如何重写父类方法等内容,并探讨了继承时应注意的设计原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Person
{
	/*
	父类拥有name和age两个变量, 其权限是protected, 也就是允许子类访问,但对象不能访问
	如果设定成private的话, 子类就不能访问到父类的成员
	*/
	protected String name;
	protected int age;
	int num = 4;

	public Person(String name , int age)
	{
		this.name = name;
		this.age = age;
	}

	public void Print()
	{
		System.out.println("我是父类Person");
	}
}

class Student extends Person
{
	int num = 5;

	public Student(String name , int age)
	{
		//super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
		super(name , age);
	}

	public void Study()
	{
		System.out.println(name + "\t" + age + "\t" + num);
	}

	public void Print()
	{
		System.out.println("我是子类Student");
		//若要在子类调用父类的方法,需使用关键字super
		super.Print();
	}
}

class Worker extends Person
{
	int num = 6;

	/*
	子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过
	super关键字调用父类的构造器并配以适当的参数列表。如果父类有无参构造器,则在子类的构造器中用super调用父类构造器
	不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。
	*/
	public Worker(String name , int age)
	{
		super(name , age);
	}

	public void Work()
	{
		System.out.println(name + '\t' + age + "\t" + num);
	}

	public void Print()
	{
		System.out.println("我是子类Worker");
		super.Print();
	}
}

public class ExtendsDemo
{
	public static void main(String[] args)
	{
		Student stu = new Student( "zhangsan" , 18);
		stu.Study();
		stu.Print();

		Worker wor = new Worker( "lisi" , 38);
		wor.Work();
		wor.Print();
	}
}

/*
final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:
*/

1. 继承是多态的基础;

2. java中支持单继承,不直接支持多继承,但对c++中的多继承机制进行改良;

3. 单继承:一个子类只能有一个直接父类;多继承:一个子类可以有多个直接父类(java中不允许,进行改良); 因为比如父类A 和父类B中都有一个相同函数fun,当子类c要继承A和B的时候,调用c的fun函数,就会产生错乱,不知道调用哪一个。

4.  java支持多重(多层)继承:C继承B,B继承A;当父类A 和父类B中都有一个相同函数fun时, 这个时候B中的fan函数已经重写了A中的fun函数,所以C继承的是B的fun函数;

5. 写继承的前提是两个类要所属关系: B is A  ,B是A的其中一种;

6. 当B中能完全包含A的方法时候才继承A,如果A和B中存在一部分相同的方法的时候, 不能将AB定义为继承, 但是可以将AB中相同的方法写成父类, AB分别继承它;


比如草食动物和肉食动物都是动物, 它们之间有共性, 但不能把它们设定为继承关系;可以把动物这个共性设定为父类,然后草食动物和肉食动物分别继承它;

7. 当本类的成员和局部变量名用this区分;当子父类中的成员变量同名时候用super区分父类;

8. super和this用法很相似;this:代表一个本类对象的引用;super:代表一个父类空间

9. 方法区存放的是代码块,没有内存;

10. 子类不能直接访问父类中private成员,方法;但子类仍然继承了父类中的private成员和方法,只是这些成员和方法前面存在权限, 子类不能访问;

11. 当子类重写父类中的方法时,子类重写的方法的权限不低于父类中的方法;也就是说子类写的方法的权限必须往大了写,父类的方法为public ,子类必须为public;父类的方法权限没写,也就是默认权限,子类必须为默认权限或者public;父类为private,子类根本不能访问父类的方法了, 也就构不成重写了;

12. 静态只能静态覆盖,或者被静态覆盖;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值