面向对象
- 面向对象概述
- 类的定义
类的使用
1.如果创建一个类,不写构造方法,系统会默认赋予一个空参构造 2.如果我们书写了构造方法,无论是空参还是全参,系统就不会自动赋予了 3.如果想要在创建对象时动态赋予成员变量值,则使用全参构造 4.创建一个对象时,只会执行一种构造方法 空参构造: 修饰符 类名(){ } 全参构造 修饰符 类名(参数类型 参数名称1,参数类型 参数名称2 ,,,,,,){ }
成员变量一般是私有的 为了调用或者赋值成员变量我们一般会使用get set方法 get或set 方法内部想要获取成员属性,一般会采用this获取,否则出现同名局部变量后优先使用局部变量 在java中遵循就近原则
封装
封装: 尽量少的将方法或者属性暴露给调用者 好处: 安全, 降低调用难度,和沟通成本 缺点: 灵活性差 方式:private 可以将属性和方法私有 不能修饰类 特点:private 修饰过后,可以在类的内部直接使用,但是在类的外部不能调用,类似于python中的__
继承
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.子类中可以重载父类中的方法
多态
多态: 在不同的环境下,展现出不同的状态就是多态. java中的多态: 在继承关系中,使用父类创建子类对象时,不同的子类对象所执行的效果不相同 多态的前提:1.要有继承关系 2.方法重写3.父类引用指向子类对象 多态情况下调用成员的规则: 调用成员变量: 当前父类引用指向子类对象,调用成员变量时,调用的是父类的成员变量 调用成员方法: 当前父类引用指向子类对象,调用成员方法时,调用的是子类的成员方法 在应用java的多态时,一般都会使用子类对象调用子类中的方法,而不会使用其调用变量,因为调用变量提现不出来多态多此一举 如果使用get 或者set 方法进行数据处理,调用的是子类的
多态的弊端
多态中有几个弊端: 1. 无法通过子类的对象调用子类中特有的功能 解决方法:向下转型 转型方法: 向上转型:从子类向父类转型(自动) 父类名称 对象名 = (子类对象); 父类名称 对象名 = new 子类名(); 向下转型:从父类向子类进行转型(强制) 子类对象 对象名 = (子类名)(父类对象); 子类对象 对象名 = (子类名)(new 父类名()); 向下转型时一定要具备继承关系,否则报错
final和static
final
final 关键字: 代表当前被修饰的内容已经是最终状态,不能被修改只能被使用 可以修饰类:此类不能被继承,但是可以继承其他的类, 一般作为工具类使用 可以修饰成员变量:此时成员变量变为常量,只能在定义时赋值一次,后续不可赋值或修改 可以修饰方法:此方法可以被继承,但是不能被重写.
static
static 静态 1.使用static修饰成员变量: 所有的对象所共有,修饰完成后,调用时使用类名调用 可以类比为python中的类属性 2.使用static修饰成员方法: static中只能调用带static的属性或者方法, 不能使用this super 可以类比为python中的类方法
抽象类
抽象:不具体 或者说没有真实的实现 抽象方法: 不具备方法体的方法,只是声明的一下方法 抽象类:具有抽象方法的类叫做抽象类 需求: 1. 创建抽象类Animal. 2. 在该类中定义抽象方法eat()
接口
接口:就是比抽象类还要抽象的一个类,使用interface进行修饰 一般接口都是给类添加特殊的功能拓展的 1.使用interface修饰 2.使用implements继承 3.在接口中只能书写抽象方法和常量 抽象方法自动添加 public abstract 常量中自动添加 public static final 4.可以使用接口类创建子类对象,调用其功能,实现接口多态 类和接口间的继承: 1.类和类之间只能单继承,或多级继承 2.类和接口之间可以单实现,也可以多实现 3.接口和接口之间,可以多继承,也可以单继承