(java中的super)不会飞还能叫Superman吗
super
谈到super,你是否第一时间想到了Superman超人,在java中super也可以被看做是一个超人,因为父类在子类的眼中大多都是超人。说的super,我们应当想到的就是父类
那我们就来看看,super到底该如何使用
super可以访问父类的构造方法,在继承时,系统默认就在子类无参构造方法中调用了父类的无参构造,也就是super()
super可以访问父类的属性
super可以访问父类的方法
注:调用super构造方法的代码必须放在子类构造方法的第一行,且不能与this()一起使用
super访问父类的构造方法
首先我们来创建一个Person类,同时创建name的set和get方法
public class Person {private String name; //设定一个属性名字private int age; //设定一个属性年龄public String getName() { //name的get方法return name;}public void setName(String name) { //name的set方法this.name = name;}public int getAge() { //age的get方法return age;}public void setAge(int age) { //age的set方法this.age = age;}void say(){ //输出方法System.out.println("我是"+name+" 我今年"+age+"岁了");}
}
既然是继承,那我们当然得创建一个子类,创建一个Student类
class Student extends Person { //继承与Person类,不写默认调用无参构造}
下面的代码是上面代码的默认格式,只是省略了而已,默认调用的方法为:
class Student extends Person { //继承与Person类,不写默认调用无参构造Student(){super();}
}
我们从main方法中创建Student对象,然后设置姓名和年龄
public static void main(String[] args) {Student s = new Student(); //创建学生类s.setName("张三"); //设置姓名s.setAge(18); //设置年龄s.say(); //调用显示方法}
可以明确的得到这句话
我是张三 我今年18岁了
当然,在上面的方法中我们并没有使用到super,现在我们在Person类中增加一个无参构造和一个全参构造
public Person(){} //无参构造public Person(String name, int age) { //全参构造this.name = name;this.age = age;}
这时如果我们要使用Student类调用Person类中的全参构造方法,那我们就得使用super类来调用
这时更改Student类中的代码为
class Student extends Person { //继承与Person类,不写默认调用无参构造Student(){super("李四",18); //无参构造中的默认调用super时传入父类全参构造的参数}
}
这样我们在main方法中就不用去设置name和age属性了
public static void main(String[] args) {Student s = new Student(); //创建学生类s.say(); //调用说话方法}
super访问父类中的属性
既然可以通过super访问父类中的构造方法,那是不是也可以通过super访问父类的属性呢,答案是肯定的,当然父类中的属性应当是不私有的,即不能通过private来修饰,那我们在父类中新创建一个不私有的属性
String love; //爱好
这时我们就可以在子类中使用super来访问love
Student(){ //子类的构造方法super("李四",18); //父类的全参构造super.love = "打篮球"; //super访问父类中的属性}
super访问父类中的方法
当我们的子类重写了父类中的方法之后我们怎么来使用父类中的方法呢
首先在Student类中重写父类的say方法
class Student extends Person { Student(){ //子类的构造方法super("李四",18); //父类的全参构造super.love = "打篮球"; //super访问父类中的属性}void say(){System.out.println("我重写了父类中的say方法");}
}
我们知道重写了父类的方法后,默认调用的就是重写后的方法,那我们想要使用父类中的方法就需要使用super来调用了
Student(){ //子类的构造方法super("李四",18); //父类的全参构造super.love = "打篮球"; //super访问父类中的属性super.say(); //调用父类中的方法}
此时的主函数中就只有创建学生对象了
public static void main(String[] args) {Student s = new Student(); //创建学生对象}
而学生类如下
class Student extends Person {Student(){super("李四",18);super.love = "打篮球";super.say();}void say(){System.out.println("我重写了父类中的say方法");}
}
Person类
public class Person {private String name; //设定一个属性名字private int age; //设定一个属性年龄String love; //爱好public Person(){} //Person无参构造public Person(String name, int age) { //Person全参构造this.name = name;this.age = age;}
至此,希望你对Superman的强大有了一定的了解,不,是super
(java中的super)不会飞还能叫Superman吗相关推荐
- java shutdowninput,java中socket.shutdownOutput()使用后如果还想用输出流怎么办
java中socket.shutdownOutput()使用后如果还想用输出流怎么办 mip版 关注:298 答案:2 悬赏:60 解决时间 2021-01-27 20:08 已解决 2021- ...
- java super父类的父类_合理使用父类的财富——Java中的super
Java中的继承让类之间有了父子关系.子类可以继承父类开放给自己的变量.方法等等. 在子类可以直接使用父类的这些变量或者方法等等. 就像下面图1的代码这样. 图1 这段代码中在子类对象可以直接使用父类 ...
- java中this,super,extends,implements相关继承概念讲解
在java中有关==继承==这个词有许多关键字:super,this,extends,implements 对于初学者来说着实比较晕,网上说的也是云里雾里.现在个人算是有些眉目了,来一次总结 ...
- java中的super关键字
原文 一.定义 它是一个指代变量,用于在子类中指代父类对象. 二.应用 2.1 应用范围 只能用于子类的构造函数和实例方法中,不能用于子类的类(静态)方法中.原因是super指代的是一个父类的对象,它 ...
- [Java]中[this][super]用法总结
this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this的用法在java中大体可以分为3种: 1.普通的直接引用 这种就不用讲了,this相当于是指向当前对象本 ...
- Java中<? super T>和List<? extends T>的区别
Java中<? super T>和List<? extends T>的区别 <? extends T> 下面通配符声明List<? extends Numbe ...
- java中的super和this_在Java中super和this的区别
摘要:在Java中我们会时常用到super及this的用法,现在我主要来区分一下super.和this.及superL()及this()之间的区别,来对它们的认识和了解: 1.this的用法在Java ...
- java中的super限定
super的用法: (1)如果需要在子类中调用父类中被覆盖的实例方法,可以用super限定来调用父类中被覆盖的方法.当然,也可以调用从父类继承的实例变量. public void callOverri ...
- java 中的 super
super super是啥? 我第一次看见这个词首先想到的是superman~~ 超人. superstar. 超级巨星. 翻译过来就是"超". 所谓超人. 就是比人牛B那么一点点 ...
- java中的super()是什么
要说super就先要说this. "this",作为一个特殊的关键字,它的规则如下: 1.可以表示构造函数传递.this(a,b)表示调用另外一个构造函数.这里面的this就是一个 ...
最新文章
- 【OpenCV 4开发详解】漫水填充法
- linux pwn练习0x01
- CS这么难申,小哥哥你怎么拿到全美最高额度奖学金的?
- 计算机基础第一章知识题库,题库第一章计算机基础知识
- linux中profile文件作用,解析Linux系统中bashrc和profile文件的作用区别
- 使用 ML.NET 实现峰值检测来排查异常
- 使用 Design Pattern Toolkit 进行模型驱动的开发入门
- 服务器dell/hp/ibm硬件检测工具
- 增值税发票税控开票软件数据接口规范
- 【Chapter 1】什么是软件架构
- mc冒险者传说java_我的世界冒险者传说1.9
- Java将指定文件/文件夹压缩成zip、rar压缩文件--解決中文乱码
- pbootcms模板,pbootcms模板程序,pboot响应式模板
- 恢复计算机文件的软件,删除文件恢复大师软件
- 数据分析之大数据分析
- 51单片机入学第八课——8*8点阵屏
- 【小家Spring】Spring AOP之Advisor、PointcutAdvisor、IntroductionAdvisor、IntroductionInterceptor(引介增强)
- 显卡内存和计算机内存,显存和内存的关系和区别
- java apache类库_java-类库-Apache Commons补充
- 一个支付流程要考虑到哪些测试点?