JavaSE基础篇 面向对象三大基本特征【继承】_默认继承object类,还是必须继承(1)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

目录

🏀继承的用法

🥅继承的相关特性

🥅通过子类对象调用继承过来的方法

🥅什么时候使用继承

🥅println方法的解释

🥅Object类的toString方法


🏀继承的用法

🥅继承的相关特性

❤️什么是继承,有什么用?
    ⭐️继承:在现实世界当中也是存在的,例如:父亲很有钱,儿子不用努力也很有钱。
    ⭐️继承的作用:
       (1)基本作用:子类继承父类,代码可以得到复用。
       (2)主要作用:因为有了继承关系,才有了后期的方法覆盖和多态机制。

❤️继承的相关特性
       ⭐️① B类继承A类,则称A类为超类(superclass)、父类、基类,
                                    ​​​​​​​        ​​​​​​​   B类则称为子类(subclass)、派生类、扩展类。  
            我们平时说的比较多的是:父类(superclass)和子类(subclass)。

            class A{}
            class B extends A{}

⭐️② java 中只支持单继承,不支持多继承,C++中支持多继承,这也是 java 体现简单性的一点。换句话说,java 中不允许这样写代码:class B extends A,C{ } 这是错误的

⭐️③ 虽然 java 中不支持多继承,但有的时候会产生间接继承的效果!
           例如:class C extends B,class B extends A,也就是说,C 直接继承 B,B 直接继承 A;其实 C 就是间接继承 A。

⭐️④ java 中规定,子类继承父类,除构造方法不能继承之外,剩下都可以继承。但是私有的属性无法在子类中直接访问(父类中private修饰的不能在子类中直接访问;可以通过间接的手段来访问,例如:调用setter and getter方法进行访问)

⭐️⑤ java 中的类没有显示的继承任何类,则默认继承 Object类,Object类是java 语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有 Object类型中所有的特征。

⭐️⑥ 继承也存在一些缺点,例如:CreditAccount 类继承 Account 类会导致它们之间的耦合度非常高,Account 类发生改变之后会马上影响到 CreditAccount 类

❤️例1:不使用继承,代码臃肿

⭐️下面两个类之间有很多代码都是重复的,这就造成代码的臃肿!代码没有得到重复利用;
在同一个类中:无参的构造方法,可以通过this()来调用有参的构造方法,让代码得到复用!
在不同类中:不同类之间让代码得到重复使用呢?这就需要继承!

public class ExtendsTest01{
	public static void main(String[] args){
//3.1 创建普通账户
		Account act = new Account();
		act.setActno("1111111");
		act.setBalance(10000);
		System.out.println(act.getActno() + ",余额" + act.getBalance());

//3.2 创建信用账户
		CreditAccount ca = new CreditAccount();
		ca.setActno("2222222");
		ca.setBalance(-10000);
		ca.setCredit(0.99);
		System.out.println(ca.getActno() + ",余额" + ca.getBalance() + ",信誉度" + ca.getCredit());
	}
}

//1. 银行账户类;账户的属性:账号、余额,就比上面对一个属性
class Account{
	//1.1 属性
	private String actno;
	private double balance;

	//1.2 构造方法
	public Account(){
	
	}
	public Account(String actno, double balance){
		this.actno = actno;
		this.balance = balance;
	}

	//1.3 setter and getter
	public void setActno(String actno){
		this.actno = actno;
	}
	public String getActno(){
		return actno;
	}
	public void setBalance(double balance){
		this.balance = balance;
	}
	public double getBalance(){
		return balance;
	}
}

//2. 其它类型的账户:信用卡账户;账号、余额、信誉度
class CreditAccount{
	//2.1 属性
	private String actno;
	private double balance;
	private double credit;

	//2.2 构造方法
	public CreditAccount(){
	
	}

	//2.3 setter and getter方法
	public void setActno(String actno){
		this.actno = actno;
	}
	public String getActno(){
		return actno;
	}
	public void setBalance(double balance){
		this.balance = balance;
	}
	public double getBalance(){
		return balance;
	}

	public void setCredit(double credit){
		this.credit = credit;
	}
	public double getCredit(){
		return credit;
	}
	
}

❤️例2:使用继承(extends)优化代码

⭐️使用继承机制来解决代码复用问题。
继承也是存在缺点的:耦合度高,父类修改,子类受牵连。

使用继承,父类中被private修饰的实列变量子类就不能直接访问了!

只能用set和get方法接口访问!

public class ExtendsTest02{
	public static void main(String[] args){
		// 创建普通账户
		Account act = new Account();
		act.setActno("1111111");
		act.setBalance(10000);
		System.out.println(act.getActno() + ",余额" + act.getBalance());

		// 创建信用账户
		CreditAccount ca = new CreditAccount();
		ca.setActno("2222222");
		ca.setBalance(-10000);
		ca.setCredit(0.99);
		System.out.println(ca.getActno() + ",余额" + ca.getBalance() + ",信誉度" + ca.getCredit());
	}
}

//1. 银行账户类;账户的属性:账号、余额
class Account{ // 父类
	//1.1 属性
	private String actno;
	private double balance;

	//1.2 构造方法
	public Account(){
	
	}
	public Account(String actno, double balance){
		this.actno = actno;
		this.balance = balance;
	}

	//1.3 setter and getter
	public void setActno(String actno){
		this.actno = actno;
	}
	public String getActno(){
		return actno;
	}
	public void setBalance(double balance){
		this.balance = balance;
	}
	public double getBalance(){
		return balance;
	}
}

//2. 其它类型的账户:信用卡账户;账号、余额、信誉度
class CreditAccount extends Account{ //子类

	//2.1 属性
	private double credit;

	//2.2 构造方法
	public CreditAccount(){
	
	}

	public void doSome(){

//重点:使用继承,被private修饰的实列变量就不能直接访问了!只能用set和get方法接口访问!
		System.out.println(actno);// 直接访问,是错误的
		System.out.println(getActno());// 间接访问,可以,这里省略了this.
	}

	//2.3 setter and getter方法
	public void setCredit(double credit){
		this.credit = credit;
	}
	public double getCredit(){
		return credit;
	}
	
}

❤️例3:默认继承和间接继承

(1)默认继承Object类,例如:class A就代表class A extends Object。

(2)间接继承:Z直接继承了Y,Y又继承X,所以Z间接继承了X。

(3)一个子类只能有一个父类,但是一个父类可以被多个子类继承。

//1. 单继承
class A // 默认继承Object类class A extends Object
{
}

class C extends A
{
}


//2.多继承 语法错误
// java只允许单继承。不允许多继承。java是简单的。C++支持多重继承。
class E extends A, B  //err
{
}

//3.间接继承:Z直接继承了Y,Y又继承X,所以Z间接继承了X
class X //默认继承Object类
{
}

class Y extends X
{
}

class Z extends Y
{
}
/*
	Z继承了Y
	Y继承了X
	X继承了Object
	Z对象具有Object对象的特征(基因)。
	Object是所有类的超类。老祖宗。类体系结构中的根。
	java这么庞大的一个继承结构,最顶点是:Object
*/

//4.一个父类可以被多个子类继承
class X //默认继承Object类
{
}

class Y extends X
{
}

class M extends X
{
}


🥅通过子类对象调用继承过来的方法

❤️例1:

测试:子类继承父类之后,能使用子类对象调用父类方法吗?
“能使用子类对象调用父类方法”;本质上,子类继承父类之后,是将父类继承过来的方法归为自己所有。实际上调用的也不是父类的方法,是他子类自己的方法(因为已经继承过来了就属于自己的)

public class ExtendsTest04{
	public static void main(String[] args){
		// 创建子类对象
		Cat c = new Cat();
		// 调用方法----没问题
		c.move();
		// 通过子类对象访问name----没问题
		System.out.println(c.name);
	}
}

// 父类
class Animal{
	// 名字(先不封装)
	String name = "XiaoHua"; //默认值不是null,给一个XiaoHua
	// 提供一个动物移动的方法
	public void move(){
		System.out.println(name + "正在移动!");
	}
}

// Cat子类
// Cat继承Animal,会将Animal中所有的全部继承过来。
class Cat extends Animal{
}
🥅什么时候使用继承

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Animal,会将Animal中所有的全部继承过来。
class Cat extends Animal{
}


#### 


#### 🥅什么时候使用继承



[外链图片转存中...(img-uBEUX1on-1715676140157)]
[外链图片转存中...(img-1DCK9j8R-1715676140158)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值