👀作者简介:大家好,我是大杉。
🚩🚩 个人主页:爱编程的大杉
支持我:点赞+关注~不迷路🧡🧡🧡
✔系列专栏:javase基础⚡⚡⚡
(❁´◡`❁)励志格言:当命运之神把你推向那勇敢的时刻,希望你能够像你想象中那么勇敢。(by 罗翔)🤞🤞
强烈安利:牛客java基础语法题单
🧡🧡写在前面
对象这种观念,本身就是十分方便的工具,使得你可以通过概念将数据和功能封装到一起此可以对问题空间的观念给出恰当的表示,而不用受制于必须使用底层机器语言。这些概合用关键字class来表示,它们形成了编程语言中的基本单位。
遗憾的是,这样做还是有很多麻烦:在创建了一个类之后,即使另一个新类与其具有相似的功能,你还是得重新创建一个新类,如果我们能以现有类为基础,复制它,然后通过添加和修改这个副本来创建新类那就要好多了。通过继承便可以达到这样的效果。
当然也有例外:当父类被修改时,,子类也会反映出这种变动
一 .如何在代码中实现继承
1.一张图理清子父类关系
一个父类包含其所有导出类(子类)所共享的特性和行为。可以创建一个父类来表示系统中某些对象的核心概念,从父类导出的其他类型,表示此核心可以被实现的各种不同方式
2.代码实现
class shape{
public void draw()
{
System.out.println("draw");
}
public String color;
//构造方法
public shape(String color)
{
this.color=color;
}
protected int num;
//protected类似于private不同的是继承的类可以访问protected修饰的变量
}
class Circle extends shape{
//子类:包含父类除构造方法以外的所有方法
}
❄注意:子类继承了父类除构造方法以外所有的属性
1.被private修饰的属性也被继承了,但是子类并不能访问。用protected修饰属性则避免了这个问题protect与private作用相同,不同的是继承的类可以访问protected成员
2.继承的类并没有继承构造方法,所以子类在继承父类后,需要先帮父类完成构造方法。
二、this关键字与super的区别
🌎super关键字
1.本质:父类对象的引用
2.在继承中的作用:帮助父类完成构造方法
3.用处:(1)super() //调用父类的构造方法
(2)super.date //调用父类的属性
(3)super.func() //调用父类的方法
class Circle extends shape{
//子类:包含父类除构造方法以外的所有方法
public Circle(String name){
//为父类构造方法传参
super(name);
}
}
🌎this关键字
1.本质:当前对象的引用
2.用法(1)this() //调用本类的其他的构造方法
(2)this.date //访问当前类的属性
(3)this.func //访问当前类的其他方法
注意:无论是this()还是super()在调用构造方法时都要写在第一行
三.四种访问修饰限定符功能区分
四.final关键字在继承中的使用
📣📣final在修饰属性时,代表属性是常量
💖💖在修饰类时,表示该类不能再往下被继承
class Circle extends shape{
public Circle(String name)
{
super(name);
}
public void length()
{
System.out.println("周长");
}
public void display()
{
System.out.println(this.color);
}
public void draw()
{
System.out.println("2draw");
}
}
//不能在往下细分类型来继承
final class big_Circle extends Circle{
public big_Circle(String name) {
super(name);
}
}
注意:java中的继承都是单根继承,但可以通过无限划分类型来实现多重继承。final修饰只是为了避免多重继承使程序的可读性差和维护成本提高
五.组合与继承的区分
🎨🎨最简单地复用某个类的方式就是直接使用该类的一个对象,此外也可以将那个类的一个对象置于某个新的类中。我们称其为“创建一个成员对象”)新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成。因为是在使用现有的类合成新的类,所以这种概念被称为组合(composition),如果组合是动态发生的,那么它通常被称为聚合(aggregation)。组合经常被视为has-a(拥有)关系就像我们常说的“汽车拥有引擎一样。
前几篇文章提到的链表方面的功能实现就是组合关系,定义一个Node 类在其他类不断使用Node类中的属性单链表框架搭建,而继承则是直接创建一个新类相当于拷贝了一份父类的属性