Day09_封装、继承、重写

封装

该露的露,该藏的藏

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

封装(数据的隐藏)

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

记住这句话:属性私有,get/set

方法用不了多少封装,主要是属性

封装的好处:

1.提高程序的安全性,保护数据

2.隐藏代码的实现细节

3.统一接口

4.系统的可维护性增加

方法重载的小知识

get/set一般不会重载,构造器重载多点

在Java中判断一个类两个方法是否相同,方法名,参数列表

继承

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

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

Java只有单继承没有多继承(一个儿子只有一个父亲,一个父亲可以有多个儿子)

//继承
public class Student extends Person {
    
}
//组合
public class Student  {
    Person person;
}

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

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

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

子类继承父类,就会拥有父亲的全部方法(修饰符需要不是private)

'money' is not public in 'com.oop.demo05.Person'. Cannot be accessed from outside package
“ money”未在“ com.oop.demo05.Person”中公开。 无法从外部包访问

Object类(所有类的父类,默认的父类)

super(和this作对比,this代表当前的super代表父)

public class Person /*extends Object*/{

    public Person() {
        //隐藏的代码:调用了父类的无参构造
        super();
        System.out.println("person无参构造执行");
    }
}
Call to 'super()' must be first statement in constructor body
调用“ super()”必须是构造函数主体中的第一条语句

当父类中有有参构造时,无参构造必须要显式声明,否则子类的无参构造会报错,如果非要使用可以再子类无参构造中调用父类的有参构造(因为如果不调用会默认调用无参构造super())

There is no default constructor available in 'com.oop.demo05.Person'
“ com.oop.demo05.Person”中没有默认的构造函数

super注意点:

1.super调用父类的构造方法,必须放在第一行

2.super必须只能出现在子类的方法或构造方法中

3.super和this不能同时调用构造方法(因为都需要在第一行)

对比this:

代表对象不同:

  • this:本身调用者这个对象

  • super:代表父类对象的引用

前提:

  • this:没有继承也可以使用
  • super:只能在继承条件才能使用

构造方法:

  • this()本类的构造
  • super()父类的构造

方法重写(多态的前提)

重写都是(非静态的公有)方法的重写和属性无关

public class A extends B {
    public static void test(){
        System.out.println("A-->test");
    }
}

public class B {
    public static void test(){
        System.out.println("B-->test");
    }
}

A.test();
B a = new A();
a.test();

静态方法隶属于类,所以输出结果只和左边有关

静态方法不能被重写!!!

一些不能被重写的方法:

1.static 方法 属于类,他不属于实例(对象)

2.final 常量(在常量池里)

3.private方法

重写总结

需要有继承关系,子类重写父类的方法

条件:

  • 方法名必须相同
  • 参数列表必须相同
  • 修饰符:范围可以扩大,但是不能缩小 public>protected>default>private
  • 抛出的异常:范围可以被缩小但不能扩大

重写,子类和父类的方法一致,但是方法体不同

为什么需要重写?

1.父类的功能子类不一定需要或者不一定满足

posted @ 2021-02-04 11:42  Bobool  阅读(80)  评论(0)    收藏  举报