面向对象03

封装

  • 该露的露,该藏的藏

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

  • 封装(数据的隐藏)

    • 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作借口来访问,这称为信息隐藏

  • 属性私有,get/set

 package java_oop.demo03;
 
 /**
  * @author IT_Jay
  * @date 2022/1/24 18:47
  */
 
 public class Studebt {
     //属性私有
     private String name;
     private int id;
     private char sex;
     private int age;
 
     //提供一些可以操作这个属性的方法
     //提供一些public 的get/set方法
     //alt+insert 生成get、set方法
 
     //get获得这个数据
     public String getName() {
         return name;
    }
     //set给这个数据设置值
     public void setName(String name) {
         this.name = name;
    }
 
     public int getId() {
         return id;
    }
 
     public void setId(int id) {
         this.id = id;
    }
 
     public char getSex() {
         return sex;
    }
 
     public void setSex(char sex) {
         this.sex = sex;
    }
 
     public int getAge() {
         return age;
    }
 
     public void setAge(int age) {
         if (age>120 || age <0){     //判断不合法数值
             this.age = 3;
        }else this.age=age;
    }
 }
 
 /**
  * 封装:
  *     1、提高程序的安全性,保护数据
  *     2、隐藏代码的实现细节
  *     3、统一接口
  *     4、系统可维护增加了
  */
 
 /**
  * public static void main(String[] args) {
  *         Studebt s1 = new Studebt();
  *         s1.setName("IT_Jay");
  *         //方法名,参数列表
  *         System.out.println(s1.getName());
  *
  *         s1.setAge(999);
  *         System.out.println(s1.getAge());
  *     }
  */

 

 

 

继承

  • 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模

  • extends的意思是“扩展”,子类是父类的扩展

  • Java中类只有单继承,没有多继承!一个儿子只能有一个爸爸,一个爸爸可以有多个儿子

  • 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等

  • 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示

  • 子类和父类之间,从意义上来讲应该具有“is a “的关系

  • object类

  • super

  • 方法重写

 

 

 package java_oop.demo05;
 
 /**
  * @author IT_Jay
  * @date 2022/1/24 19:14
  */
 //Java中,所有的类都默认(直接或者间接)继承Object
 public class Person /*extrnds Object*/ {
 
     private int money = 10_0000_0000;
 
     public int getMoney() {
         return money;
    }
 
     public void setMoney(int money) {
         this.money = money;
    }
 
     public void say(){
         System.out.println("说了一句话");
    }
 }
 
 /**
  * public static void main(String[] args) {
  *         Student student = new Student();
  *         student.say();
  *         System.out.println(student.getMoney());
  *     }
  */

 

 

super关键字

 super注意点:
    1、super调用父类的构造方法,必须在构造方法的第一个
    2、super必须只能出现在子类的方法或者构造方法中
    3、super和this不能同时调用构造方法
 
 与this相比:
    代表的对象不同:
        this:调用本身
        super:代表父类对象的应用
    前提:
        this:没有继承也可以使用
        super:只能在继承条件才可以使用
    构造方法:
        this(); 本类的构造
        super(); 父类的构造

 

 

  • main方法:

 package java_oop;
 
 import java_oop.demo05.Student;
 
 /**
  * @author IT_Jay
  * @date 2022/1/22 18:06
  */
 
 //一个项目应该只存一个main方法
 public class Application {
     public static void main(String[] args) {
         Student student = new Student();
         student.test("张牧之");
         System.out.println("======================");
         student.test01();
    }
 }
  • Person父类:

 package java_oop.demo05;
 
 /**
  * @author IT_Jay
  * @date 2022/1/24 19:37
  */
 
 public class Person {
     protected String name = "张麻子";
 
     public Person() {
         System.out.println("Person无参构造执行");
    }
 
     //   private 私有的 无法继承
     public void print(){
         System.out.println("Person");
    }
 }
  • Student子类:

 package java_oop.demo05;
 
 /**
  * @author IT_Jay
  * @date 2022/1/24 19:37
  */
 
 public class Student extends Person{
     public Student() {
         //隐藏代码:调用了父类的无参构造
         //super();   //调用父类的构造器,必须在子类构造器的第一行
 //       this("111");       //调用自己的构造器也要写在第一行,故不能和super同时使用
         System.out.println("Student无参构造执行");
    }
 
     //有参构造
 
 
     public Student(String name) {
         this.name = name;
    }
 
     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 test01(){
         print();
         this.print();
         super.print();
    }
 }

 

 

 

posted @ 2022-01-24 20:22  作困兽之斗  阅读(66)  评论(0)    收藏  举报