super和this关键字怎么用?
packagecom.ket.cor;importorg.henan.util.*;classAnimalS{Stringsex;publicAnimalS(){this...
package com.ket.cor;
import org.henan.util.*;
class AnimalS{
String sex;
public AnimalS(){
this("male");
System.out.println("This is the outline of Animal ! no param");
}
public AnimalS(String str){
this.sex = str;
System.out.println(this.sex);
System.out.println("Have parameters !");
}
public void eat(){
System.out.println("Have no special");
}
public String getSex(){
return this.sex;
}
public void setSex(String sex){
this.sex = sex;
}
}
class Person extends AnimalS{
private String name;
private int age;
String sex;
public Person(){
super();
System.out.println("This is subclass !");
this.name = "tom";
this.age = 20;
this.sex = "nv";
}
public void exc(){
System.out.println(this.name);
System.out.println(this.age);
System.out.println(getSex());
setSex("female");
System.out.println(getSex());
}
}
public class TestAnimalS{
public static void main(String[] args){
Person pr = new Person();
pr.exc();
pr.setSex("nan");
System.out.println(pr.getSex());
pr.eat();
System.out.println(pr.sex);
//System.out.println(super.sex);
}
}在main里面不可以用this和super指代新创建的类和父类吗?新创建的类里面,如果方法是继承的,且有相同变量,调用父类方法改变此变量就只能改变父类里面的此变量,而不能改变子类里面的变量,为什么呢? 展开
import org.henan.util.*;
class AnimalS{
String sex;
public AnimalS(){
this("male");
System.out.println("This is the outline of Animal ! no param");
}
public AnimalS(String str){
this.sex = str;
System.out.println(this.sex);
System.out.println("Have parameters !");
}
public void eat(){
System.out.println("Have no special");
}
public String getSex(){
return this.sex;
}
public void setSex(String sex){
this.sex = sex;
}
}
class Person extends AnimalS{
private String name;
private int age;
String sex;
public Person(){
super();
System.out.println("This is subclass !");
this.name = "tom";
this.age = 20;
this.sex = "nv";
}
public void exc(){
System.out.println(this.name);
System.out.println(this.age);
System.out.println(getSex());
setSex("female");
System.out.println(getSex());
}
}
public class TestAnimalS{
public static void main(String[] args){
Person pr = new Person();
pr.exc();
pr.setSex("nan");
System.out.println(pr.getSex());
pr.eat();
System.out.println(pr.sex);
//System.out.println(super.sex);
}
}在main里面不可以用this和super指代新创建的类和父类吗?新创建的类里面,如果方法是继承的,且有相同变量,调用父类方法改变此变量就只能改变父类里面的此变量,而不能改变子类里面的变量,为什么呢? 展开
3个回答
展开全部
super与this关键字的使用
1. super关键字
super关键字的作用是用于子类引用父类的成员,如属性、方法或者构造器。
1.1 调用父类构造器
用于调用父类的构造器,这是super的用法之一,它的基本格式是:
super([arg_list]);
直接用super()加上父类构造器所需要的参数,就可以调用父类的构造器了。如果父类中有多个构造器,系统将自动根据super()中参数个数和参数类型来匹配父类中的构造器。
需要注意的是如果子类中没有显示地调用父类中无参数的构造器,也没有在构造器中调用重载的其它构造器,则系统将会默认调用父类中无参数的构造器。此时如果父类中没有无参的构造器,则编译将会出错。
1.2 调用父类方法、属性
当super用于引用父类中的属性或方法时,使用下面的格式:
super.属性
super.方法()
注意,在这个时候,父类的属性或方法必须是那些protected(受保护)或者public(公共)等可以让子类访问的属性或者方法。
super用于调用父类的方法主要用于在子类中定义了和父类中同名的属性、或进行了方法的覆盖,而又要子类中访问父类中的同名属性或覆盖前的方法的时候。
2. this关键字
2.1 使用this来区分当前对象
Java中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象:
super与this关键字的使用 构造器中指该构造器所创建的新对象;
super与this关键字的使用 方法中指调用该方法的对象;
super与this关键字的使用在类本身的方法或构造器中引用该类的实例变量和方法。
this只能用在构造器或者方法中,用于获得调用当前的构造器、方法的对象引用。可以和任何的对象引用一样来处理这个this对象。
2.2 在构造器中使用this来调用对象本身的其他构造器
当我们给一个重载构造器的时候,可能在一个构造器中的一段代码和另一个构造器完全一样,那么,就可以在这个构造器中直接调用另一个构造器,这样可以避免编写相同的代码。在构造器中使用下面的方式可以调用对象本身的其他的构造器,语法如下:
this([arg_list]);
直接用this()加上类构造器所需要的参数,就可以调用类本身的其它构造器了。如果类中有多个其它构造器定义,系统将自动根据this()中的参数个数和参数类型来找出类中相匹配的构造器。
注意,在构造器中可以通过this()方式来调用其它的构造器,但在一个构造器中最多只能调用一次其它的构造器。并且,对其它构造器的调用动作必须在构造器的起始处,否则编译的时候将会出现错误。另外,不能在构造器以外的地方以这种方式调用构造器。
1. super关键字
super关键字的作用是用于子类引用父类的成员,如属性、方法或者构造器。
1.1 调用父类构造器
用于调用父类的构造器,这是super的用法之一,它的基本格式是:
super([arg_list]);
直接用super()加上父类构造器所需要的参数,就可以调用父类的构造器了。如果父类中有多个构造器,系统将自动根据super()中参数个数和参数类型来匹配父类中的构造器。
需要注意的是如果子类中没有显示地调用父类中无参数的构造器,也没有在构造器中调用重载的其它构造器,则系统将会默认调用父类中无参数的构造器。此时如果父类中没有无参的构造器,则编译将会出错。
1.2 调用父类方法、属性
当super用于引用父类中的属性或方法时,使用下面的格式:
super.属性
super.方法()
注意,在这个时候,父类的属性或方法必须是那些protected(受保护)或者public(公共)等可以让子类访问的属性或者方法。
super用于调用父类的方法主要用于在子类中定义了和父类中同名的属性、或进行了方法的覆盖,而又要子类中访问父类中的同名属性或覆盖前的方法的时候。
2. this关键字
2.1 使用this来区分当前对象
Java中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象:
super与this关键字的使用 构造器中指该构造器所创建的新对象;
super与this关键字的使用 方法中指调用该方法的对象;
super与this关键字的使用在类本身的方法或构造器中引用该类的实例变量和方法。
this只能用在构造器或者方法中,用于获得调用当前的构造器、方法的对象引用。可以和任何的对象引用一样来处理这个this对象。
2.2 在构造器中使用this来调用对象本身的其他构造器
当我们给一个重载构造器的时候,可能在一个构造器中的一段代码和另一个构造器完全一样,那么,就可以在这个构造器中直接调用另一个构造器,这样可以避免编写相同的代码。在构造器中使用下面的方式可以调用对象本身的其他的构造器,语法如下:
this([arg_list]);
直接用this()加上类构造器所需要的参数,就可以调用类本身的其它构造器了。如果类中有多个其它构造器定义,系统将自动根据this()中的参数个数和参数类型来找出类中相匹配的构造器。
注意,在构造器中可以通过this()方式来调用其它的构造器,但在一个构造器中最多只能调用一次其它的构造器。并且,对其它构造器的调用动作必须在构造器的起始处,否则编译的时候将会出现错误。另外,不能在构造器以外的地方以这种方式调用构造器。
展开全部
1.
main 因为是static静态的,不能指示新创建的类和父类
this(有参数/无参数) 用于调用本类相应的构造函数
super(有参数/无参数) 用于调用父类相应的构造函数
this. 后跟方法或属性 指示本类的方法或属性
super. 后跟方法或属性(父类中指明的public protected)
2.
调用父类方法改变此变量就只能改变父类里面的此变量,而不能改变子类里面的变量,为什么呢?
调用父类的方法改变的变量只能是父类的变量这是必然的,因为父类中不存在子类新加的变量,因此只能改变父类中的变量
main 因为是static静态的,不能指示新创建的类和父类
this(有参数/无参数) 用于调用本类相应的构造函数
super(有参数/无参数) 用于调用父类相应的构造函数
this. 后跟方法或属性 指示本类的方法或属性
super. 后跟方法或属性(父类中指明的public protected)
2.
调用父类方法改变此变量就只能改变父类里面的此变量,而不能改变子类里面的变量,为什么呢?
调用父类的方法改变的变量只能是父类的变量这是必然的,因为父类中不存在子类新加的变量,因此只能改变父类中的变量
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
super()与this()的区别
This():当前类的对象,super父类对象。
Super():在子类访问父类的成员和行为,必须受类继承规则的约束
而this他代表当前对象,当然所有的资源都可以访问.
在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造.
而在方法中super和this使用的方法就差不多了.只不过super 要考虑是否能访问其父类的资源.
This():当前类的对象,super父类对象。
Super():在子类访问父类的成员和行为,必须受类继承规则的约束
而this他代表当前对象,当然所有的资源都可以访问.
在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造.
而在方法中super和this使用的方法就差不多了.只不过super 要考虑是否能访问其父类的资源.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询