Java教程

构造方法,super, this

本文主要是介绍构造方法,super, this,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

构造方法

  • 常见问题:

    • (1)为什么在实例化子类的对象的时候,会先调用父类的构造方法?

      • 实例化子类时,会调用子类的无参构造方法,子类的无参构造方法第一行有默认代码super();会去实例化父类,实例化父类的时候,会调用父类的无参构造方法;

         

    • (2)子类在哪里调用了父类的构造方法?

      • 在子类的构造方法的第一行中默认(不显示)调用super()方法,即调用了父类构造方法;

      • 如果父类里面没有定义有参构造,那么必须在子类的构造方法的第一行显示的调用super();

      • 如果子类当中的构造方法的第一行写了this(); 那么默认(不显示)的那个super();语句就会不起作用;因为Super()和this()都只能定义在构造方法的第一行;

         

  • 代码案例1:构造方法

    public class Demo02 {
        public static void main(String[] args) {
    ​
            Student student=new Student();
            student.haha();//Student
    ​
        }
    }
    ​
    ​
    //父类
    public  class Person {
        //正常方法
        public void haha(){
            System.out.println("Person");
        }
    ​
    }
    ​
    //子类
    public class Student extends  Person  {
    ​
        public void haha(){
            System.out.println("Student");
        }
    }
  • 总结:

    • 调用构造器:可以用this(); 也可以用super();

    • super()调用父类构造器:必须放在子类构造器的第一行;否则会编译报错;

    • this()调用构造器,也必须放在构造器的第一行;

    • 但是,super和 this不能同时调用,也就是说,要么调用父类构造器,要么调用子类构造器;

    • 重点:子类无参构造中:有一句默认代码:super()//默认是不显示的;如果要显式调用,必须放在第一行

       

 

  • 多态存在的条件:

    • 有继承关系;

    • 子类重写父类的方法;

    • 父类的引用指向子类的对象;

       

  • 多态的注意点:

    • 多态是方法的多态,属性没有多态;

    • instanceof方法:判断是否有继承关系;

       

  • 代码案例:重点1

    /**
     * 测试类
     */
    public class Demo02 {
        public static void main(String[] args) {
    ​
            //创建一个Student对象
            Student student=new Student();
            student.haha();//Student
    ​
            //创建一个父类对象
            Person person=new Person();
            person.haha();//Person
    ​
            //多态
            Person person1=new Student();
            person1.haha();//Student//子类重写父类的方法,执行的就是子类的方法;
    ​
        }
    }
    ​
    ​
    //父类
    public  class Person {
        //正常方法
        public void haha(){
            System.out.println("Person");
        }
    }
    ​
    //子类
    public class Student extends  Person  {
    ​
        public void haha(){
            System.out.println("Student");
        }
    }
  • 代码案例2:抽象类案例

    public class Demo02 {
        public static void main(String[] args) {
    ​
    ​
            Student student=new Student();
    ​
            student.haha();//Student
            student.study();//study
            Person person=new Student();
            person.haha();//Student
            person.study();//study
    ​
    ​
        }
    }
    ​
    //父类
    public abstract class Person {
    ​
        //正常方法
        public void haha(){
            System.out.println("Person");
        }
    ​
        //抽象方法
        public abstract void study();
    ​
    }
    ​
    //子类
    public class Student extends  Person  {
    ​
        public void haha(){
            System.out.println("Student");
        }
    ​
        @Override
        public void study() {
            System.out.println("study");//子类重写父类的抽象方法
        }
    }
    ​
    
这篇关于构造方法,super, this的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!