• Java学习笔记11(this,super)


    this在构造方法间的使用,

    public class Person {
        private String name;
        private int age;
    
        public Person() {
            //this()是调用其他的构造方法
            //this()必须写在构造方法第一行
            this("张三", 20);
        }
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }
    public class Test {
        public static void main(String[] args) {
            Person p1 = new Person("张三", 18);
            Person p2 = new Person();
        }
    }

    super:

      在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的super();语句父类的构造方法第一行也有隐式的super();语句,所有的类都有一个object祖宗类,父类都继承object类

      super()和this()的区别

      this()是调用自己的构造方法

      super()是调用父类的构造方法

    public class Fu {
        public Fu(){
            System.out.println("这是父类构造方法");
      } 
    }
    public class Zi extends Fu {
        public Zi() {
          //这里有隐式的super();
            System.out.println("这是子类构造方法");
        }
    }
    public class Test1 {
        public static void main(String[] args) {
            new Zi();
        }
    }//运行结果:这是父类构造方法 ,
     //      这是子类构造方法

    子类和父类内存:

      创建子类对象对象空间中,划分两个空间,一个存放父类用super标记,一个存放自己用this标记;父类成员变量随子类进入划分给父类的区域,(super标记的区域)

    父类的构造方法如果有参数,子类必须写全,

    子类可以重载构造方法,不过第一行必须是super();

    (上面this中写到,this()必须写在第一行,在这里写到super()必须写在第一行,这里就存在矛盾,因此这两个关键字不能共存,要保证子类的所有构造方法直接或间接调用到父类的构造方法即可,具体如下代码)

    父类如果有多个构造方法,子类任意调用一个就行;

    public class Fu {
        public Fu() {
            
        }
    }
    public class Zi extends Fu {
        public Zi() {
            this("hhh");//调用自己的构造方法,间接调用父类构造方法
        }
        public Zi(String s){
            super();
        }
    }

    super用法:

    public class Person {
        private String name;
        private int age;
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    }
    public class Student extends Person {
    
        public Student(String name, int age) {
            super(name, age);
        }
        
    }
    public class Teacher extends Person {
    
        public Teacher(String name, int age) {
            super(name, age);
        }
    
    }
    public class Test1 {
        public static void main(String[] args) {
            Student s=new Student("学生", 18);
            Teacher t=new Teacher("老师", 28);
            System.out.println(s.getName());
            System.out.println(t.getAge());
        }
    }
  • 相关阅读:
    ubuntu 15.10 64bit 下 steam无法启动
    ubuntu下使用OBS开斗鱼直播
    sql server 2008 management studio安装教程
    navicat for mysql 破解版
    nginx 重写去掉index.php
    phpstorm 注册码破解
    tp where使用数组条件,如何设置or,and
    PHPstorm 配置主题
    IE下无法保存Cookie和Session问题
    GitLab的安装及使用
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/10552544.html
Copyright © 2020-2023  润新知