Scanner是新增的一个简易文本扫描器,在 JDK 5.0之前,是没有的。查看最新在线文档: public final class Scanner extends Object…
Java中的两个关键字——super、this
一、super
super 是java中方的一个关键字,用它可以引用父类中的成员:
super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造器中调用父类的构造器
使用super关键字注意事项:
1、当子类和父类都有同名的属性时,在子类中如果要使用父类的属性 super . 属性
2、 super只能应用在成员方法和构造方法中,不能用在静态方法中(和this是一样的)
3、如果在构造方法中使用必须放在第一行
4、在构造方法中this()和super()不能同时出现
super没有什么需要解释的地方,我们用代码来看看super具体的一些强大功能吧
示例一、使用super调用基类的属性:
public class Father { int num=20; }
public class Child extends Father{ int num; public void print(){ num=10; super.num=30; System.out.println("num="+num); System.out.println("super.name="+super.num); } }
示例二、使用super调用基类中的构造方法:
public class Father { int num; public Father() { System.out.println("父类中的无参构造方法---"); } public Father(int num){ System.out.println("父类中的有参的构造方法----"+num); } }
常见错误:(把示例二代码删除父类中的无参构造方法)
public class Father { int num; public Father(int num){ System.out.println("父类中的有参的构造方法----"+num); } }
二、this关键字:
1.this关键字-用法一:当类中某个非静态方法的参数名跟类的某个成员变量名相同时,为了避免参数的作用范围覆盖了成员变量的作用范围,必须明确地使用this关键字来指定成员变量
代码示例:
public class ThisDemo { int a=123; public void show() { int a=321; System.out.println("a="+a); System.out.println("this.a="+this.a); this.a=a; System.out.println("赋值后的this.a="+this.a); } }
测试类:
public class Test { public static void main(String[] args) { ThisDemo h=new ThisDemo(); h.show(); } }
运行结果:
解释:由于局部变量优先级高于成员变量,所以第一条输出语句里面的a=321,第二个输出语句中,this指定了这里的a是成员变量中的a,所以输出成员变量a=123;this.a=a,也就是将局部变量的值赋值给成员。
2.this关键字-用法二:如果某个构造方法的第一条语句具有形式this(…),那么这个构造方法将调用本类中的其他构造方法。
代码示例:
public class ThisDemo { public ThisDemo() { this("shen_hua"); } public ThisDemo(String name) { //带一个String类型的参数的构造方法 } public ThisDemo(String name,int age) { //带两个参数的构造方法 } }
解释:在第一个无参的构造方法里面,this();包含了一个字符串,所以它会调用本类中形参为一个字符串的构造方法。
3.this关键字除了可以引用变量或者成员方法之外,每个类的非静态方法都会隐含一个this隐含名称,它指向调用这个方法的对象。
4.一些内部类和匿名类,如事件处理。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。
三、this和super的对比
NO. | 比较点 | this | supper |
1 | 访问属性 | 首先在子类中查找,如果没有就在父类中查找 | 直接查找父类 |
2 | 访问方法 | 先再子类中找,如果没有就去父类中查找 | 直接访问父类中到方法 |
3 | 调用构造 | 调用本类中的其他构造方法 | 调用父类的跟构造方法 |
4 | 特殊 | 指自身对象 | 没有 |
5 | 作为参数 | 可以作为参数 | 没有 |