super详解

打印 上一主题 下一主题

主题 863|帖子 863|积分 2589

1.super和this的区别

    super调用的是父类的属性或方法,this是调用当前类的属性或者方法。    (1)super和this关于属性的调用
    (2)super和this关于方法的调用

(3)代表的对象不同:
        this:代表本身调用者这个对象
        super:代表父类对象的引用
(4)使用前提条件不同:
        this:在没有继承关系中也可以使用
        super:只能在继承条件下才可以使用
(5)构造方法:
        this:默认调用本类的构造器
        super:默认调用的是父类的构造器
2.构造器在继承中的调用顺序



3.有参无参在继承中的注意点

    下图子类无参构造报错的原因是:当父类写了有参构造器而没有显示定义无参构造器,则父类的有参构造器会自动干掉其无参构造器,而子类无参构造器在使用前会先调用父类的无参构造器,父类的无参被有参干掉,导致子类也无法使用无参构造器。
    以上错误有两种解决方法:
    (1)父类中重写了有参构造器之后,显示定义无参构造器
    (2)在子类中调用父类的有参构造即可。如下图:
注:若在子类中不显示写super则默认调用的是无参构造,在父类重写有参构造器的前提下,想要不报错,父类中必须显示定义无参构造器

4.super在使用时的注意点

    (1)当super调用父类的构造方法时必须在子类构造方法的第一行。    (2)super只能出现在子类的方法或构造方法中。    (3)super和this不能同时调用构造方法,因为这两都必须要在构造方法的第一行,因此不能同时在构造方法中使用。
点击查看代码
  1. package com.Tang.oop.demo05;
  2. public class Application {
  3.     public static void main(String[] args) {
  4.         Student student = new Student();
  5.        student.test("唐");
  6.        System.out.println("=============");
  7.        student.test1();
  8.     }
  9. }
  10. package com.Tang.oop.demo05;
  11. //子类继承父类之后,就会拥有父类的全部方法
  12. public class Student extends Person{
  13.     public Student() {
  14.         super("Twq");//影藏了super代码:调用了父类的无参构造
  15.         System.out.println("Student无参构造执行了");
  16.     }
  17.     private String name="Twq";
  18.     public void print(){
  19.         System.out.println("Student");
  20.     }
  21.     public void test1(){
  22.         print();//Student
  23.         this.print();//Student
  24.         super.print();//Person
  25.     }
  26.     public void test(String name){
  27.         System.out.println(name);//唐
  28.         System.out.println(this.name);//Twq
  29.         System.out.println(super.name);//jianduan
  30.     }
  31. }
  32. package com.Tang.oop.demo05;
  33. public class Person {
  34.     public Person(){
  35.     }
  36.     public Person(String name) {
  37.         System.out.println("Person无参构造执行了");
  38.     }
  39.     protected String name="jianduan";
  40.     public void print(){
  41.         System.out.println("Person");
  42.     }
  43. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表