1. 面向对象概述
“面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
2. 类的定义
“类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。”
3. 类的使用
1.如果创建一个类,不写构造方法,系统会默认赋予一个空参构造
2.如果我们书写了构造方法,无论是空参还是全参,系统就不会自动赋予了
3.如果想要在创建对象时动态赋予成员变量值,则使用全参构造
4.创建一个对象时,只会执行一种构造方法
空参构造:
修饰符 类名(){
}
全参构造
修饰符 类名(参数类型 参数名称1,参数类型 参数名称2 ,){
}
成员变量一般是私有的
为了调用或者赋值成员变量我们一般会使用get set方法
get或set 方法内部想要获取成员属性,一般会采用this获取,否则出现同名局部变量后优先使用局部变量
在java中遵循就近原则
4. 封装
封装: 尽量少的将方法或者属性暴露给调用者
好处: 安全, 降低调用难度,和沟通成本
缺点: 灵活性差
方式:private 可以将属性和方法私有 不能修饰类
特点:private 修饰过后,可以在类的内部直接使用,但是在类的外部不能调用,类似于python中的__
5. 继承
1.在子类的构造方法中,都会自动调用父类的空参构造
2.如果父类没有空参构造,我们可以使用spuer(参数的方式)调用父类的全参构造
一般情况下,我们会手动给出父类的空参构造
- 局部变量 类中的成员变量, 父类中的成员变量的调用
int age = 10;
Person p1 = new Person();
System.out.println("局部变量:" + age);
System.out.println("ItcastMan成员变量:" + this.age);
System.out.println("Chinese成员变量:" + super.age);
System.out.println("Person成员变量:" + p1.age);
方法重写
子类中继承父类方法的特点:
1.在子类中可以继承父类中的非私有属性和方法
2.子类对象中可以书写新的方法
3.子类中和父类中相同的方法可以进行覆盖,这个叫做重写
注意: 重写方法时要使用override
父类中的私有方法不能重写,但是可以书写与其同名的子类方法
重写父类方法时,不能比父类的权限更低
4.子类中可以重载父类中的方法
6. 多态
多态: 在不同的环境下,展现出不同的状态就是多态.
java中的多态: 在继承关系中,使用父类创建子类对象时,不同的子类对象所执行的效果不相同
多态的前提:1.要有继承关系 2.方法重写3.父类引用指向子类对象
多态情况下调用成员的规则:
调用成员变量: 当前父类引用指向子类对象,调用成员变量时,调用的是父类的成员变量
调用成员方法: 当前父类引用指向子类对象,调用成员方法时,调用的是子类的成员方法
在应用java的多态时,一般都会使用子类对象调用子类中的方法,而不会使用其调用变量,因为调用变量提现不出来多态多此一举
如果使用get 或者set 方法进行数据处理,调用的是子类的
多态的弊端
多态中有几个弊端:
1. 无法通过子类的对象调用子类中特有的功能
解决方法:向下转型
转型方法:
向上转型:从子类向父类转型(自动)
父类名称 对象名 = (子类对象);
父类名称 对象名 = new 子类名();
向下转型:从父类向子类进行转型(强制)
子类对象 对象名 = (子类名)(父类对象);
子类对象 对象名 = (子类名)(new 父类名());
向下转型时一定要具备继承关系,否则报错
7. final和static
final
final 关键字:
代表当前被修饰的内容已经是最终状态,不能被修改只能被使用
可以修饰类:此类不能被继承,但是可以继承其他的类, 一般作为工具类使用
可以修饰成员变量:此时成员变量变为常量,只能在定义时赋值一次,后续不可赋值或修改
可以修饰方法:此方法可以被继承,但是不能被重写.
static
static 静态
1.使用static修饰成员变量: 所有的对象所共有,修饰完成后,调用时使用类名调用
可以类比为python中的类属性
2.使用static修饰成员方法: static中只能调用带static的属性或者方法, 不能使用this super
可以类比为python中的类方法
8. 抽象类
抽象:不具体 或者说没有真实的实现
抽象方法: 不具备方法体的方法,只是声明的一下方法
抽象类:具有抽象方法的类叫做抽象类
练习:
- 创建抽象类Animal.
- 在该类中定义抽象方法eat()
9. 接口
java
接口:就是比抽象类还要抽象的一个类,使用interface进行修饰
一般接口都是给类添加特殊的功能拓展的
1.使用interface修饰
2.使用implements继承
3.在接口中只能书写抽象方法和常量
抽象方法自动添加 public abstract
常量中自动添加 public static final
4.可以使用接口类创建子类对象,调用其功能,实现接口多态
类和接口间的继承:
1.类和类之间只能单继承,或多级继承
2.类和接口之间可以单实现,也可以多实现
3.接口和接口之间,可以多继承,也可以单继承