Java面向对象基础概念
1. 什么是面向对象
用人的世界观改变计算机的世界观(人是怎么想的,让计算机按照人的想法去实现)
1.1 对象
万物皆对象(静态:用属性来表示。 动态:用行为来表示)
1.2 类
具有相同属性和行为的一类事物
类是对象的模板,对象是类的实例
1.4 类的定义
关键字:class
public void class Person(){
}
Java程序中最基本的单位是:类
1.5 对象的实例化
// 类名 对象名 = new 类名(); 实例化对象(new对象)
Person p = new Person();
p.name = "李四";
1.6 成员变量(全局变量)与局部变量
成员变量(全局变量):声明在类内,方法外的变量(作用域:该类所有地方都可以访问)
局部变量:声明在方法内的变量(作用域:在所声明的方法内部)
1.7 方法
1.7.1 格式
//访问控制修饰符 返回值类型 方法名(){ 代码块 }
public void study(){
//代码块
}
1.7.2 分类:4类
-
无返回值,无参数
public void eat(){
} -
无返回值,有参数
public void eat(String name){
} -
有返回值,无参数
public int eat(){
int a;
a = 1;
return a;
} -
有返回值,有参数
public int eat(String name,int money){
return money;
}
2 面向对象的特征
封装,继承,多态
2.1 封装(最终的效果是:私有属性,公有方法)
2.1.1 什么是封装
隐藏属性,方法或方法实现细节的过程
作用:隔离性,安全性
2.1.2 访问控制修饰符及其应用范围
| 本类 | 同包 | 子类 | 所有地方 | |
|---|---|---|---|---|
| private | ✔ | |||
| 默认 | ✔ | ✔ | ||
| protected | ✔ | ✔ | ✔ | |
| public | ✔ | ✔ | ✔ | ✔ |
2.1.3 构造器/构造方法
方法名与类名相同
特点:没有返回值,连void都没有
作用:初始化成员变量(给成员变量赋初始值)
2.1.4 this关键字
自己的,本类的
-
修饰变量:通过.调用,全局变量,可以放在任意位置
-
修饰方法:通过.调用,成员方法,可以放在任意位置
-
修饰构造方法:直接使用,只能放在第一行
创建一个类时,会默认有一个有参和无参的构造方法。如果一旦书写构造方法,那么原本隐性无参的构造器将不存在
SUN公司建议:一个封装类至少包含两个构造方法(一个无参构造方法,一个包含所有参数的构造方法)
2.1.5 方法重载(Overload)
方法名相同,参数列表(参数的类型、个数、顺序)不同的方法
public void eat(){
int money = 10;
System.out.println(money);
}
public void eat(int money){
String name;
}
public void eat(int money,String name){
}
2.2 继承
2.2.1 什么是继承
在一个类的基础上产生一个新类的过程,叫继承。原本的类叫父类(超类),新产生的类叫子类(派生类)
关键字:extends
public class Father(){
String name;
int age;
}
public class Son extends Father(){
}
public class Demo{
public static void main(String[] args) {
Son s = new Son();
}
}
2.2.2 特点
-
子类可以继承父类非私有的属性和方法
-
子类可以扩展自己的属性和方法
-
构造器不能继承,只能调用
-
子类可以重写父类的方法
-
可以声明父类,创建子类
-
声明什么类型,就能调用该类型的属性和方法
-
创建什么类型,就能调用该类型的属性和方法(前提是子类进行方法重写)
-
创建什么类型,就能强转为什么类型
-
2.2.3 向上转型和向下转型
向上转型(自转) Fathtr f = new Son()
向下转型 (强转)Son s = (Son)new Father()
2.2.4 子类访问控制修饰符大于父类访问控制修饰符
2.2.5 方法重写(Override)
方法签名(方法名和参数列表)相同,实现效果不同
2.5.6 super
父类的,超类的
-
修饰属性:在子类中调用父类属性,放在任意行都行
-
修饰方法:在子类中调用父类方法,放在任意行都性
-
修饰构造器:在子类中调用父类构造器,必须放在第一行
2.5.7 方法重写的规则
-
方法名相同,参数列表相同
-
返回值类型相同或者是其子类
-
子类访问控制修饰符权限不能严于父类
-
父类的静态方法不能被子类覆盖为非静态的方法,父类的非静态方法不能被子类覆盖为静态方法
-
子类可以定义与父类同名的静态方法,以便在子类中隐藏父亲的静态方法
-
父类的私有方法不能被子类覆盖
-
不能抛出比父类方法更多的异常正确使用方法的重写或覆盖
2.3 多态
2.3.1 什么是多态
同种事物,多种状态
2.3.2 多态的表现
-
使用父类作为形参
-
使用父类组为方法的返回值
-
方法重载和方法重写
2.3.3 工厂模式
2.3.3.1 什么是工厂模式
顾名思义就是一个工厂,只不过这个工厂是用来创建对象的。
2.3.3.2 工厂模式的优点
-
对客户隐藏创建对象的细节
-
清洗客户端,客户端获取对象不需要那么多选择语句
-
客户类只知道哪种类型的对象被创建了,而不必知道哪个具体的子类被初始化了
2.4 抽象
2.4.1 抽象方法
由abstract修饰的方法就是抽象方法
特点:没有方法体
抽象方法的作用:是被子类重写
2.4.2 抽象类
由abstract修饰的类就是抽象类
特点:无法实例化自己
2.4.3 抽象方法与抽象类的关系
有抽象方法的类一定输抽象类;抽象类不一定包含抽象方法
注意:如果父类是抽象的,子类实现部分父类的抽象方法,此时子类也一定要抽象(不常用);常用的方式是:父类抽象,子类实现所有方法
2.4.4 抽象类的特点
-
不能实例化自己
-
抽象类和抽象方法都需要用abstract修饰
-
抽象方法必须在抽象类中,抽象类中可以没有抽象方法
-
抽象类的子类如果重写所有抽象方法,那么就是一个具体的类
-
抽象类有构造方法,目的是让子类来调用构造方法初始化
2.5 接口(你定规范,我来实现)
2.5.1 什么是接口
一个类中所有的方法都是抽象的,那么该类就是一个特殊的抽象类即接口
2.5.2 关键字
interface
2.5.3 特点
没有方法体,其里面所有抽象方法都可以省略abstract
不能实例化自己,只能实例化其实现子类
2.5.4 接口的实现(implements)
接口满足了部分子类的需求:可以多实现,没有先后顺序
如果一个类有继承、有实现,一定先继承后实现
抽象类和接口
相同点
-
代表系统的抽象层
-
都不能被实例化
-
都能包含抽象方法
不同点
-
在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法
-
一个类只能继承一个直接的父类,但可以实现多个接口
使用原则
-
接口做系统与外界交互的窗口
-
接口本身一旦制定,就不允许随意修改
-
抽象类可以完成部分功能实现,还有部分功能可作为系统的扩展点
2.6 static:静态的
-
修饰属性:静态属性,可以直接类名.属性名调用,也可以实例化后调用
-
修饰方法:静态方法,可以直接类名.属性名调用,也可以实例化后调用
-
修饰代码块:静态代码块,直接加载到内存中
-

浙公网安备 33010602011771号