java基础——封装、继承+super

封装

  • 该露的露,该藏的藏

    • 我们程序设计要追求"高内聚,低耦合"。
      高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;
      低耦合:仅暴露少量的方法给外部使用
  • 封装(数据的隐藏)

    • 通常,应禁止直接访问一个对象中数据的实际表示,而通过操作接口来访问,这称为数据的隐藏
  • 记住这句话:属性私有,get / set.

package com.dong.oop.demo03;

public class StudentAction {
    //属性私有
    private String name;// 名字
    private int age;// 年龄
    private char sex;// 性别
    private int ID;// 学号

    //提供一些可以操作这个属性的方法
    //提供一些public的get、set方法

    // get 获得这个数据
    public String getName(){
        return this.name;
    }

    //set 给这个数据设置值
    public void setName( String name ){
        this.name = name;
    }
    //Alt+insert 自动生成get 和set 方法

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age < 150 && age >= 0) {
            this.age = age;
        }else {
            this.age = 3;
        }
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public int getID() {
        return ID;
    }

    public void setID(char ID) {
        this.ID = ID;
    }
}
/*
封装的作用:
1. 提高程序的安全性,保护功能
2. 隐藏代码的实现细节
3. 统一接口
4. 系统可维护性高

public class Application {
    public static void main(String[] args) {
        StudentAction s1 = new StudentAction();

        s1.setName("王二狗");
        s1.getName();
        System.out.println(s1.getName());

        s1.setAge(999);
        s1.getAge();
        System.out.println(s1.getAge());
    }
}
 */

继承

  • 继承的本质是对某一批类的抽象,从而是实现对现实世界更好的建模
  • extends 的意思是“扩展”。子类是对父类的扩展
  • java 中类只有单继承,没有多继承(一个儿子只有一个爸爸,但是爸爸可以有多个儿子)
  • 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合。
  • 继承关系是两个类,一个为子类(派生类),一个父类(基类)。子类继承父类,使用关键字extends来表示
  • 子类和父类之间,从意义上讲应该具有“ is a ”的关系。Ctrl+H:打开继承数。
  • object类
  • super - this
  • 方法重写:重点----->多态
public class Person {

    //在java中,所有的类都默认直接或者间接继承object类。
    // ctrl+H :打开继承关系

    //public  :需要被继承的属性,一般用public
    //protected
    //default
    //private :不能被继承
    private int monney = 10_0000_0000;
    public void say(){
        System.out.println("说了句,你真狗");
    }

    public int getMonney() {
        return monney;
    }

    public void setMonney(int monney) {
        this.monney = monney;
    }
}
//========================================================


// 学生 is 人; 派生类,子类
// 子类继承父类,就会继承父类的全部方法
public class Student extends Person{

}
//========================================================
public class Teacher extends Person{

}
//=======================================================
import com.dong.oop.demo04.Student;
import com.dong.oop.demo04.Teacher;

// 一个项目应该只存在一个main方法。
public class Application {
    public static void main(String[] args) {

        Student student = new Student() ;
        student.say();
        System.out.println(student.getMonney());
        Teacher teacher = new Teacher();
        teacher.say();

    }
}

super 注意点:

  1. super调用父类的构造方法,必须在构造方法的第一个。
  2. super 必须只能出现在子类的方法或者构造方法中 。
  3. super 和 this 不能同时调用方法!

vs this:

  1. 代表的对象不同

    • this :本身调用者这个对象
    • super:代表父类对象的应用
  2. 前提:

    • this: 没有继承也可以使用
    • super:只能在继承条件下才能使用
  3. 构造方法:

    • this() :本类的构造
    • super():父类的构造
public class Person<name> {
    public Person() {
        System.out.println("Person无参构造器执行了");
    }
    protected String name = "花花";
    // private的东西无法被继承
    public void print(){
        System.out.println("Person");
    }
}
//================================================
public class Student extends Person{

    public Student() {
        //隐藏了调用父类的无参构造
        //而且 调用父类的构造器,必须在子类构造器的第一行
        super();//
        System.out.println("Student无参构造器执行了");
    }

    private String name = "小猫";

    public void print() {
        System.out.println("Student");
    }

    public void test(String name){
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }

    public void test2(){
        print();
        this.print();
        super.print();
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
//===============================================
// 一个项目应该只存在一个main方法
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.test("xiaoming");
        System.out.println("=======");
        student.test2();
    }
}
posted @ 2021-05-26 16:18  放慢_脚步  阅读(63)  评论(0编辑  收藏  举报