面向对象
今日思维导图
定义一个类
格式:
public class 类名{
//成员变量
数据类型 成员变量名;
//成员方法
public 返回值类型 方法名(参数列表){
方法体;
return 返回值;
}
}
创建一个对象
类名 对象名 = new 构造方法名();
封装
- 步骤
a. 给成员变量加上权限修饰符, private
b. 给对象类采用get和set方法
构造器
- 作用
给创建出的对象的成员变量初始化 - 格式
public 类名(){
}
public 类名(参数列表){
}
this关键字
- this 代表
成员方法由哪个对象调用, 方法中的this代表哪个对象 - 使用场景
a. set方法中给重名的成员变量赋值
b. 在构造方法中使用this, 给同名的成员变量赋值
匿名对象
-
是指 new对象, 但是不使用对象名 来接收
匿名对象: new Dog(); -
场景
当一个对象只使用一次时,就可以选择使用匿名对象
继承
概念
在一个已知类A的基础上, 创建新类B的过程
类A成为父类/基类/超类/SuperClass
类B成为子类/派生类/SubClass
格式
public class 父类{
//成员变量
//成员方法
}
public class 子类 extends 父类{
// 子类中自动继承父类中的成员变量和成员方法
// 子类中也可以添加自己的成员变量和成员方法
}
好处
a. 提高代码复用性
b. 类与类之间有了关系, 为多肽提供前提
子类不能继承的东西
a. 父类的构造方法无法继承,(因为构造方法和类名是一样的)
b. 父类的私有成员,子类可以继承但是不能直接访问.
继承后的特点- 成员变量
a. 当子父类的成员变量不同名时, 访问成员变量是没有歧义的.
b. 当子父类的成员变量同名时, 会根据就近原则,优先访问子类中的成员变量
c. 如果想要访问父类中的成员变量,需要加super关键字 ,super就代表从父类中找
super 在哪个类中 , 就是去找该类的父类. 最好在子类中使用
继承后的特点- 成员方法
a. 当子父类的成员方法不同名时, 调用成员方法是没有歧义的.
b. 当子父类的成员方法同名时, 使用子类对象调用该方法, 根据就近原则, 优先调用子类自己的成员方法.
c. 无法在main中使用 子类对象名.super.成员方法调用父类中成员方法的, 需要在子类中使用super
重写的概念和应用
- 方法的重载
方法名相同,参数列表不同(类型或个数不同) - 方法的重写
在继承关系中,子类中出现了一个和父类除了方法体,其他一模一样的方法,称为方法的重写 - 方法重写的应用
当在子类中发现父类中的方法不适用的时候, 可以进行重写
@Override重写注解
@Xxx 称为注解, 英文名 Annotation
@Override 此注解叫做方法重写注解,
作用是用来检查重写的方法是否格式正确,
这个注解标记的方法,就说明这个方法必须是重写父类的方法,否则编译阶段报错。
如下:
public class Cat extends Animal {
// 声明不变,重新实现
// 方法名称与父类全部一样,只是方法体中的功能重写写了!
@Override
public void cry(){
System.out.println("我们一起学猫叫,喵喵喵!喵的非常好听!");
}
}
注意事项
- 方法重写是发生在子父类之间的关系。
- 子类方法覆盖父类方法,必须要保证子类方法权限大于等于父类方法权限(子类大于等于父类,一般来说写一样的权限)。
public >protevted> 不写(默认|default)> private - 子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样
- 子类不能重写父类的私有方法和静态方法。
继承后的特点 - 构造器
- 子类无法继承父类的构造方法, 因为构造方法和类名一致,
- 在子类的任何方法的第一行,默认有一个 super(). 表示调用父类的无参构造方法,父类成员变量初始化后,才可以给子类使用。
- 子类构造器执行的时候,都会在第一行默认先调用父类无参数构造器一次。
- 子类构造器的第一行都隐含了一个super()去调用父类无参数构造器,super()可以省略不写。
- 子类如果想要手动调用父类有参构造, 可以自己添加super(父类形参);写在子类构造方法中
super和this
父类空间优先于子类对象产生
this(参数)也必须写在构造方法的第一行, 所以this(参数)和super(参数)只能出现一个
this可以调用本类构造方法(减少重复代码)
如图
super和this的共同使用
小结
- 子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的
super()。 - super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现。
- super(..)和this(...)是根据参数去确定调用父类哪个构造器的。
- super(..)可以调用父类构造器初始化继承自父类的成员变量的数据。
- this(..)可以调用本类中的其他构造器。
java继承的特点
- Java只支持单继承,不支持多继承。
- 一个类可以有多个子类。
- 可以多层继承。
抽象类
抽象类的概念
我们把没有方法体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类。
- 抽象方法 : 没有方法体的方法。
- 抽象类:包含抽象方法的类。
abstract使用格式
abstract是抽象的意思,用于修饰方法方法和类,修饰的方法是抽象方法,修饰的类是抽象类。
抽象方法
- 原因
因为父类不知道子类的具体如何操作, 所以需要写出一个抽象方法来形容概括子类行为. - 定义格式:
修饰符 abstract 返回值类型 方法名 (参数列表); - 代码举例:
public abstract void run(); - 在父类中定义了抽象方法后, 在子类中重写该抽象方法就可以了
抽象类
定义格式:
abstract class 类名字 {
}
**注意:
- 抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象类。
- 抽象类不能创建对象,天生就是父类, 只能给别人继承.
- 需要在子类中重写所有抽象方法之后,该子类才能创建对象
抽象类的特征和注意事项
特征:
有得:抽象类得到了拥有抽象方法的能力。
有失:抽象类失去了创建对象的能力。
其他成员(构造器,实例方法,静态方法等)抽象类都是具备的。
注意事项:
1.抽象类不能创建对象
2.抽象类中,可以有构造器,是供子类创建对象时,初始化父类成员使用的
3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
4.抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类,编译无法通过而报错。
5.抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。
抽象类的存在意义
抽象类体现的是模板思想
便于继承
继承图解
网友评论