茫茫人海千千万万,感谢这一秒你看到这里。希望我的面试题系列能对你的有所帮助!共勉!
愿你在未来的日子,保持热爱,奔赴山海!
java基础知识(继承)
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。描述的是事物之间的所属关系,这种关系是:is-a
的关系。
继承:就是子类继承父类的属性和行为,使得子类对象(实例)可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。
兔子和长颈鹿属于食草动物类,老虎和狮子属于食肉动物类。而食草动物和食肉动物又是属于动物类。
那是不是兔子、长颈鹿、老虎、狮子都属于动物类呢?答案是没错滴!虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。我们就可以再多个类中存在相同属性和行为时,我们可以将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。
在java当中会通过extends
关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:
class 父类 {
}class 子类 extends 父类 {
}
需要注意一点: java 不支持多继承,但支持多重继承。就如下:
class a {
}class b extends a { (对的)
}class c extends a, b { (错的)
}class c extends b { (对的)
}
顶层父类是object类。所有的类默认继承object,作为父类。
编写一个父类极其对应的子类信息
结构如下:
代码如下:
父类person:
子类student没有额外的属性和方法:
子类teacher多了一个工资的属性和独有的教书方法:
编写测试代码:
结果如下:
最爱吃鱼罐头
18
1999.99
老师在认真教书!
罐头氯酸钙
12
从结果来看,子类继承父类,就可以直接得到父类的成员变量和方法。而子类可以编写一些特有的属性和方法,但是是否可以继承所有成分呢?
并不是父类的所有内容都可以给子类继承的:
这里先将这两个关键字,super和this在继承关系中,运用比较频繁。
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。this关键字:指向自己本类的引用。super和this完整的用法如下:
具体演示,创建测试inheritdemo2:this.成员变量 — 本类的
super.成员变量 &对党的认识和入党动机#8212; 父类的this.成员方法名() — 本类的
super.成员方法名() — 父类的
调用结果如下:
注意:animal : eat
cat : eat
animal : eat
子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super()。
super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现。
getter/tter
方法访问父类的private成员变量。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过super
关键字调用父类的构造器并配以适当的参数列表。如果父类构造器没有参数,则在子类的构造器中不需要使用 super
关键字调用父类构造器,系统会自动调用父类的无参构造器。演示过程:结果如下:
——teacher 类继承——
调用了父类的无参构造器: 高中试题person()
teacher
调用了父类的带参构造器: person(string name)
teacher(string name):张三
——student 类继承——
调用了父类的带参构造器: person(string name)
subclass2
调用了父类的无参构造器: person()
student(string name):张三三
final 关键字主要用在三个地方:变量、方法、类。
修饰类:表示该类不能被继承;修饰方法:表示方法不能被重写;修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。final 的特点:
对于一个 final 变量,如果是基本数据类型的变量,则其数值一旦在初始 化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不 能再让其指向另一个对象。当用 final 修饰一个类时,表明这个类不能被继承。final 类中的所有成员 方法都会被隐式地指定为 final 方法。使用 final 方法的原因有两个。第一个原因是把方法锁定,以防任何继承 类修改它的含义;第二个原因是效率。在早期的 java 实现版本中,会将 final 方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用 带来的任何性能提升(现在的 java 版本已经不需要使用 final方法进行这些优化了)。类中所有的 private 方法都隐式地指定为 final。我们测试下修饰类后到底能不能继承:
结果:可以看出来在被final修饰的fu类没办法继承,而且在编译期间就会报错了,没办法通过运行。
子类中出现与父类一模一样的方法时(返回值类型江苏新高考方案,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。
发生在子父类之间的关系。 子类继承了父类的方法,但是子类觉得父类的这方法不足以满足自己的需求,子类重新写了一个与父类同名的方法,以便覆盖父类的该方法。
写个测试案例:
运行结果:
动物都可以跑!
我们一起学猫叫,一起喵喵喵!让我们一起撒个娇
可以看出,蓝猫调用了重写后的sing方法。
加上后的子类代码形式如下:
相信各位看官看到这里,都对java继承有了一定的了解吧,继承在java的特性里还是占据比较大得多作用,他还有很多特点:
高代码的复用性(减少代码冗余,相同代码重复利用)。使类与类之间产生了关系。子类拥有父类非 private 的属性、方法。子类可以拥有自己的属性和方法,即子类可以对父类进行扩展,可以用自己的方式实现父类的方法。提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。让我们也一起加油吧!本人不才,如有什么缺漏、错误的地方,也欢迎各位人才大写作手法佬评论中批评指正!
学到这里,今天的世界打烊了,晚安!虽然这篇文章完结了,但是我还在,永不完结。我会努力保持写文章。来日方长,何惧车遥马慢!
感谢各位看到这里!愿你韶华不负,青春无悔!
到此这篇关于java由浅入深刨析继承的文章就介绍到这了,更多相关java 继承内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-06 00:53:54,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/c5d5a43cdf97d2ae47e69f5bc5844d20.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Java由浅入深刨析继承.doc
本文 PDF 下载地址:Java由浅入深刨析继承.pdf
留言与评论(共有 0 条评论) |