目录
一.封装
1.概述
2.包机制
3.权限控制修饰符
二.继承
1.概述
2.语法
3.Super关键字
1.super和this的区别
2.解决的问题
3.实例语句块的执行时机
4.方法重写
5.final关键字
三.多态
1.编译时多态
2.运行时多态
四.软件设计六大原则
1.单一职责原则
2.里氏替换原则
3.依赖倒置原则
4.接口隔离原则
5.迪米特原则(最少朋友原则)
6.开闭原则
一.封装
1.概述
不直接提供访问的数据,而是提供访问的接口
2.包机制
package: 设置的是编译之后的class文件的保存目录,和源文件没有关系
如果没有设置package语句,则class文件和 java文件在同目录
作用:
1.为了解决命名冲突问题
2.package语句只能出现在java源文件的第一行
3.通常采用公司域名倒序的方式,
例如:com.tledu.oa.system
com.公司名.项目名.模块名
4.完整的类名是带有包名的
带有包名的类:
编译: javac -d 生成路径 源文件
javac -d ./ -encoding utf-8 A.java
运行
java com.tledu.zrz.A
public class com.tledu.zrz.A{
}
导入机制
import 包;
import com.xxx.aaa.A;//导入A类
import com.xxx.aaa.*;//导入这个包下的所有类
注意:java.lang.*下的类是核心类,不需要导入
静态导入
在访问这个类的静态属性的时候,可以直接写名字,不需要加类名前缀
3.权限控制修饰符
访问控制符
private 只能在本类中使用
default 不加就是default,在同一个包中都可以访问
protected 同包,或者有继承关系
public 都可以访问
二.继承
1.概述
从已有类中派生出新的类,新的类能有已有类的非私有属性和行为,并可以拓展新的属性和行为
目的:代码重用
1.java中只支持单继承,一个类只能有一个父类,但是一个类可以拥有多个子类
2.private私有的属性不能继承
3 如果一个类没有显示继承另一个类,则默认继承Object(java.lang.Object)
Object是java提供的根类(祖宗)
任何类都直接或者间接继承Object
2.语法
class 子类名 extends 父类名{}
3.Super关键字
1.普通的直接引用
与this类似,super相当于是指向当前对象的父类的引用,这样就可以用http://super.xxx来引用父类的成员。
2.子类中的成员变量或方法与父类中的成员变量或方法同名时,用super进行区分
class Person{
protected String name;
public Person(String name) {
this.name = name;
}
}
class Student extends Person{
private String name;
public Student(String name, String name1) {
super(name);
this.name = name1;
}
public void getInfo(){
System.out.println(this.name); //Child
System.out.println(super.name); //Father
}
}
public class Test {
public static void main(String[] args) {
Student s1 = new Student("Father","Child");
s1.getInfo();
}
}
3.引用父类构造函数
1.super和this的区别
super其实没有指向父类的对象,而是指向了父类的数据块,this是当前对象的引用
super:保存了父类型特征,可以理解为是父类对象
2.解决的问题
1.区分父类和子类重名的属性或方法
2.super(…)只能用在子类构造方法第一行,用来调用父类构造方法
注意:this(…)也是必须在构造方法第一行,所以this()和super()不能同时出现
如果构造方法周总没有this(),也没有super() 则构造方法第一行默认有super() 调用父类无参构造
3.实例语句块的执行时机
代码:
父类:
class Father{
public Father(){
System.out.println("父类的构造方法执行了");
}
}
子类:
class Son{
{
System.out.println("实例语句块执行了");
}
public Son(){
super();
System.out.println("子类的构造方法执行了");
}
}
测试类:
class Main{
public static void main(String[] args) {
//测试实例语句块的执行时机
Son son = new Son();
}
}
运行结果:
父类的构造方法执行了
实例语句块执行了
子类构造方法执行了
结论:
实例语句块的执行时机是父类构造方法执行完成之后,也就是super()方法执行之后
4.方法重写
什么时候需要重写
当父类不能满足子类需求的情况下,需要使用到方法重写
重写条件
1.有继承关系的体系中
2.方法名相同,参数列表相同,返回值相同
3.不能比原方法拥有更低的访问权限
4.不能比原方法拥有更宽泛的异常
5.覆写,特指成员方法,和静态比那里,静态方法,成员变量无关.
Override和Overload区别:
override是重写,overload是重载
overload解决的问题是方便记忆,而override解决的问题是满足子类的需求
例子:
//父类
class Father{
public void m1(int a){
//这里是父类方法的具体实现
}
}
//子类
class Son extends Father{
public void m1(int a){
//这里是子类方法的具体实现
}
}
5.final关键字
final是个修饰符,表示最终的
作用:
final修饰的类不能被基础,
final修饰的成员方法,不能被重写
final修饰的变量没有默认值,并且不能二次赋值,必须显示赋值
常量:一般使用 public static final修饰 简称psf,整个程序生命周期值不能被修改
三.多态
父类引用指向子类对象,使用父类类型声明的变量保存子类对象的引用
语法:父类 变量 = new 子类();
java中提供了两种多态形式
1.编译时多态
编译时多态是静态的,主要指方法重载,他根据不同的参数列表来区分不同的方法
编译之后就会变成不同的方法,在运行时,就谈不上多态了,只是不同的两个方法而已
2.运行时多态
运行时多态是动态的,主要是指动态绑定来实现,指子类实现父类的方法
四.软件设计六大原则
1.单一职责原则
功能职责单一,只拥有一种变化
2.里氏替换原则
所有能使用父类的地方都可以使用子类
3.依赖倒置原则
高层要依赖于抽象
4.接口隔离原则
最小接口原则,否则需要实现很多不需要的方法
5.迪米特原则(最少朋友原则)
一个对象应该对其他对象尽可能少的关注,简称类间解耦
6.开闭原则
尽可能通过拓展软件实体来解决需求,而不是修改实体
修改关闭,拓展打开