java 关于继承中的super() 方法
举个例子:先自定义一个类:publicclassBird{privateStringname;publicBird(){}publicBird(Stringname){t...
举个例子:
先自定义一个类:
public class Bird{
private String name;
public Bird() {
}
public Bird(String name){
this.name = name;
}
public void walk() {
System.out.println("走路");
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
再定义一个类,同时继承上边的类;
public class Chicken extends Bird{
private String crest;
public Chicken(){
super();
}
public Chicken(String name,String crest) {
super(name);
this.name = name;
}
.............
}
我省略了一些代码,应该是对这个问题无关紧要的。在第二个自定义的类中,super()方法一共出现了两次,分别是super()和super(name),请问super() 本身是个什么含义,放在这里又作何解释?希望能用白话而不是JAVA专业术语解释,谢谢。 展开
先自定义一个类:
public class Bird{
private String name;
public Bird() {
}
public Bird(String name){
this.name = name;
}
public void walk() {
System.out.println("走路");
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
再定义一个类,同时继承上边的类;
public class Chicken extends Bird{
private String crest;
public Chicken(){
super();
}
public Chicken(String name,String crest) {
super(name);
this.name = name;
}
.............
}
我省略了一些代码,应该是对这个问题无关紧要的。在第二个自定义的类中,super()方法一共出现了两次,分别是super()和super(name),请问super() 本身是个什么含义,放在这里又作何解释?希望能用白话而不是JAVA专业术语解释,谢谢。 展开
4个回答
展开全部
要讲super就不能不提this,下面从4个角度讲解一下super(需要对比的时候拿this对比一下,加深理解)
1. super关键字表示超(父)类的意思。this变量代表对象本身。
2. super访问父类被子类隐藏的变量或覆盖的方法。当前类如果是从超类继承而来的,当调用super.XX()就是调用基类版本的XX()方法。其中超类是最近的父类。
3.调用super() 父类构造函数的时候只能调用在子类构造函数的第一行
4.this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this
例如:
class Person {
protected void print() {
System.out.println("The print() in class Person.");
}
}
public class DemoSuper extends Person {
public DemoSuper(){
super(); //调用父类的构造方法,而且放第一行,如果不写,系统自动加
}
public void print() {
System.out.println("The print() in class DemoSuper.");
super.print();// 调用父类的方法
}
public static void main(String[] args) {
DemoSuper ds = new DemoSuper();
ds.print();
}
}
1. super关键字表示超(父)类的意思。this变量代表对象本身。
2. super访问父类被子类隐藏的变量或覆盖的方法。当前类如果是从超类继承而来的,当调用super.XX()就是调用基类版本的XX()方法。其中超类是最近的父类。
3.调用super() 父类构造函数的时候只能调用在子类构造函数的第一行
4.this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this
例如:
class Person {
protected void print() {
System.out.println("The print() in class Person.");
}
}
public class DemoSuper extends Person {
public DemoSuper(){
super(); //调用父类的构造方法,而且放第一行,如果不写,系统自动加
}
public void print() {
System.out.println("The print() in class DemoSuper.");
super.print();// 调用父类的方法
}
public static void main(String[] args) {
DemoSuper ds = new DemoSuper();
ds.print();
}
}
展开全部
super()和super(name):
调用父类中与当前构造函数参数一样的那个构造函数来初始化子类实例对象.
调用父类中与当前构造函数参数一样的那个构造函数来初始化子类实例对象.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
super() 是调用父类的构造函数,你例子中有Bird()和Bird(String name)两个方法,super()是调用Bird()构造函数,而super(name)是调用Birth(String name)构造函数。注意super() 调用的是对应参数个数和类型相同的父类构造函数。
public Chicken(String name,String crest) {
super(name);
this.name = name;
}
应该重复了吧,super(name)应该就是this.name = name。
public Chicken(String name,String crest) {
super(name);
this.name = name;
}
应该重复了吧,super(name)应该就是this.name = name。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先告诉你一些概念:
继承中的构造方法!!
1。子类的构造过程中必须调用父类的构造方法
2.子类可在自己的构造方法中使用super()来调用父类的构造方法
(1)使用this来调用本类的另外的构造方法
(2)如果调用super必须写在子类构造方法的第一行
3.如果子类的构造方法中没有显示的调用父类的构造方法,则系统默认的调用父类的无参的构造方法。
4.如果子类的构造方法中既没有显示调用父类的构造方法,而父类中又没有无参的构造方法,则编译出错。
那你这里第一个super()无参的就是调用了上面Bird类的walk() 方法!
super(name)这个有参数就是调用public Bird(String name){
this.name = name; 这个方法!
继承中的构造方法!!
1。子类的构造过程中必须调用父类的构造方法
2.子类可在自己的构造方法中使用super()来调用父类的构造方法
(1)使用this来调用本类的另外的构造方法
(2)如果调用super必须写在子类构造方法的第一行
3.如果子类的构造方法中没有显示的调用父类的构造方法,则系统默认的调用父类的无参的构造方法。
4.如果子类的构造方法中既没有显示调用父类的构造方法,而父类中又没有无参的构造方法,则编译出错。
那你这里第一个super()无参的就是调用了上面Bird类的walk() 方法!
super(name)这个有参数就是调用public Bird(String name){
this.name = name; 这个方法!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询