面向对象
封装
Java语言中,访问修饰符可以出现在类,成员变量,成员方法以及构造方法前,用来控制权限。Java提供了4种级别的访问控制 public 权限最宽 修饰的类,属性,方法不仅可以跨类还可以跨包访问 private 权限最狭隘 修饰的类,属性,方法只能被该类的对象访问,即使是其子类也不能访问! 做的很绝-.- protected 介于public和private之间 修饰的类,属性,方法能被该类的对象,本包,子类访问(即使没和父类在同一包中) default 默认访问模式,只向同一个包中的类公开,即同包访问。
this和super关键字
1、this关键字代表当前对象 2、super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类
this与super对比 this.属性 操作当前对象的属性 this.方法 调用当前对象的方法 引用构造函数:调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。 普通的直接引用:与this类似,super相当于是指向当前对象的父类,这样就可以用super.xxx来引用父类的成员。 子类中的成员变量或方法与父类中的成员变量或方法名同名时,表示调用父类的成员 引用构造函数:调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。默认在构造函数第一条语句是“super();”,无论写与否。 super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句) this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句) 调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用 super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。 super() 和 this() 类似,区别是,super() 从子类中调用父类的构造方法,this() 在同一类内调用其它方法。 super() 和 this() 均需放在构造方法内第一行。 尽管可以用this调用一个构造器,但却不能调用两个。 this 和 super 不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有 super 语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。 this() 和 super() 都指的是对象,所以,均不可以在 static 环境中使用。包括:static 变量,static 方法,static 语句块。 从本质上讲,this 是一个指向本对象的指针, 然而 super 是一个 Java 关键字。
继承
抽象类(is-a)
抽象类有构造方法,但是不能直接用来直接创建对象
抽象类必须有抽象方法(1个或者多个),可以有普通方法
匿名内部类
1. 是一次性的
2. 专注于抽象类内部抽象方法的实现
方法的重写唯一可以改变的就是访问控制权限(子类比父类的访问权限大)---》里氏替换原则
重写
参数列表必须完全与被重写的方法参数列表相同。
返回的类型必须与被重写的方法的返回类型相同(Java1.5 版本之前返回值类型必须一样,之后的 Java 版本放宽了限制,返回值类型必须小于或者等于父类方法的返回值类型)。
访问权限不能比父类中被重写方法的访问权限更低(public>protected>default>private)。
重写方法一定不能抛出新的检査异常或者比被重写方法声明更加宽泛的检査型异常。例如,父类的一个方法声明了一个检査异常 IOException,在重写这个方法时就不能抛出 Exception,只能拋出 IOException 的子类异常,可以抛出非检査异常。
声明为 static 的方法不能被重写,但是能够再次声明。
构造方法不能被重写。
接口(is -like)
所有的方法都是抽象方法(默认修饰符是public abstract)
方法修饰符可以是default ,static(1. 可以实现在接口中有方法体,2. 抽象方法是实现在普通类中没有方法体),
接口没有构造方法
接口的属性是public static final ,必须给赋初值;
当两个接口中含有相同的方法(相同的返回时),在类同时实现这个接口的时候,在类中重写的方法是共享同一个方法
接口可以同时继承(extends)多个接口
final关键字
修饰的属性(只能在创建的时候或者构造方法的时候初始化),必须为其初始化,若在定义的时候,没有为其赋值可以在构造方法用(this.属性 = 值)赋值,一经赋值不可更改
修饰方法:不能被重写
修饰的类型:不能被继承
abstart不能与final连用
static关键字
修饰属性
修饰方法
静态方法内部,不能使用this关键字,静态内部不能出现动态的调用
静态代码块
类加载的时候执行。实例化多个对象只执行一次,最小化 只要加载的东西满足条件就执行
修饰类型(内部类)
修饰的内部类不能直接访问外部类的非静态属性,创建静态内部类时候可以直接new对象,不需要创建外部类
static元数据区
网友评论