3/31~4/2总结

封装

封装指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问
 

访问控制符

一共4个:privite,default,protected,public,访问控制级别由小到大

privite  (当前类访问权限):

使用范围:类里的一个成员(成员变量,方法,构造器等)

作用:这个成员只能在当前类的内部被访问,所以这个修饰符用来修饰成员变量是最适合的。

default(包访问权限):

使用范围:类里的一个成员(成员变量,方法,构造器等)或者一个外部类

作用:不使用任何访问控制修饰符就是包访问权限,包访问权限即能被相同包下的其他类访问

protected(子类访问权限):

 使用范围:类里的一个成员(成员变量,方法,构造器等)

作用:被它修饰的成员既可以被同一个包中的其他类访问,也可以被不同包中的子类访问

public(公共访问权限):

使用范围:类里的一个成员(成员变量,方法,构造器等)或者一个外部类

作用:不管在哪都能访问这个成员或者类都能访问

构造器

系统默认的构造器是无参的

var p = new Person();

但是通过自定义一个构造器,可以进行对象的初始化

下面这段代码通过构造器来初始化对象

var p =new  PersonTest("java",899);

3/31~4/2总结_第1张图片

                                                                                                               

如果一构造器A的语句完全包含另一个构造器B,那么就可以在 A中调用B

      3/31~4/2总结_第2张图片                                                                                                                                                                                                                                                                                              

这里的this(name,color)就是调用了前面那个构造器,注意:调用语句必须写在执行体的第一行

类的继承

语法:

修饰符 class 子类名 extends 父类名

{

}        

 特点:

  • 子类继承了父类,将得到父类的全部的成员变量,方法和内部类(包括内部接口,枚举)不能得到构造器和初始化块
  • java中,每个子类只能有一个直接父类,但能有无数个间接父类

 3/31~4/2总结_第3张图片

3/31~4/2总结_第4张图片

定义了一个ap子类继承了apple,然后new一个ap对象(ap类里没有定义任何属性),可以看到p有name,color,weight等apple类的成员。

方法的重写

当父类中的方法不能满足子类时,子类需要通过方法重写来满足要求

两同两小一大:

两同

方法名相同,形参列表相同

两小

子类方法返回值类型要比父类方法返回值类型更小或者相等

子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或者相等

一大

子类方法的访问权限要比父类方法访问权限更大或者相等

注意:

重写的方法和被重写的方法要么都是类方法,要么都是实例方法

子类也可以重载父类的方法:在子类中定义一个与父类方法名字相同,参数列表不同的方法即可

如果父类方法使用private修饰,那么子类就无法重写父类方法



super限定

如果在子类中对父类中某个方法进行了重写,仍需要调用父类中这个方法的话,需要用到super

格式:

调用被覆盖的实例方法super.fly()

调用被覆盖的实例变量super.a

super和this都不能出现在static修饰的方法中

如果父类中被覆盖的是类变量,则用类名加变量的方式调用

下面这段代码会先输出父类的a,再输出本类的a

3/31~4/2总结_第5张图片

 3/31~4/2总结_第6张图片

如果在某个方法中没有指定调用哪个a

则查找顺序是:

  1. 本方法中
  2. 本类中
  3. 本类的直接父类中,若没有就找父类的父类,一直找下去,全部没有的话就编译错误

 向上转型

System.out.println(((Parent)d).a);

本来d是子类orz的对象

使用语句(Parent)d 后,就转型成父类Parent的对象了

 3/31~4/2总结_第7张图片

   在子类构造器中使用父类构造器的初始化代码

重复的部分直接用super调用即可,格式super(size,name)

与this调用同一个类的构造器相同,super也必须在第一行

3/31~4/2总结_第8张图片

 父类构造器总是会在子类构造器之前执行

多态

通过一个父类可以引用它的不同的子类

我们只有在运行的时候才知道引用变量所指向的具体实例变量

引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法

你可能感兴趣的:(java,单例模式,servlet)