笔记
类与对象
类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体被称为类。类的定义如下:
- 类是相同或相似对象的一种抽象,是对象的一个模板,它描述一类对象的行为和状态。
- 类是具有相同属性和方法的对象的集合。
类是对象的抽象,对象是类的具体
一个类可以包含以下类型变量:
- 局部变量:在方法、构造方法或语句块中定义的变量叫局部变量,方法结束后变量就会自动销毁。
- 成员变量:成员变量是定义在类中,方法体之外的变量。
- 类变量:也叫静态变量,声明在类中,方法体之外,static类型。
PS
- 局部变量的作用域仅限于定义他的方法内。而成员变量的作用域在在整个类内部都是可见的。
- 同时在相同的方法中,不能有同名的局部变量;在不同的方法中,可以有同名的局部变量。
- 成员变量和局部变量同名是,局部变量具有更高的优先级。
构造方法
- 构造方法的名称和类名相同,且没有返回值。
- 如果在定义类的时候没有写构造方法,系统会默认生成一个无参构造方法,这个构造方法什么也不会做。
- 当有指定的构造方法是,系统就不会再添加无参构造方法了。
- 构造方法的重载:方法名相同,但参数不同的多个方法。
static
静态成员或方法都可以直接调用
final
- final修饰类,则该类不允许被继承,为最终类
- final 修饰方法,则该方法不允许呗覆盖(重写)
- final 修饰属性,则该类的属性不会被进行隐式的初始化或在构造方法中赋值(选其一)
- final 修饰变量,则该变量的值只能赋一次值,即常量。
封装
封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。
继承
继承可以看成是类与类之间的衍生关系。
extends(继承除开private方法和属性)
- 子类拥有父类除了private以外的所有属性和方法
- 子类可以拥有自己的属性和方法
- 子类可以重写实现父类的方法
- Java中的继承是单继承,一个类只有一个父类
super
- 访问父类的属性 super.属性名
- 访问父类方法
- 子类构造方法需要调用父类的构造方法时,在子类的构造方法体里最前面的位置:super()
方法重载
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。方法重载一般用于创建一组任务相似但是参数不同的方法。
规则:
- 方法中的参数列表必须不同。
- 访问权限,返回值类型和抛出异常都不同不能实现重载
- 重载方法中允许抛出不同的异常
- 可以有不同的返回值类型,但是参数列表必须不同
- 可以有不同的访问修饰符
方法重写
子类可以继承父类的方法,但如果子类对父类的方法不满意,想在里面加入适合自己的一些操作时,就需要将方法进行重写。
ps:在方法重写时要注意,重写的方法一定要与原父类的方法语法保持一致,比如返回值类型,参数类型以及个数,和方法名都必须一致。
多态
多态是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。
例子:start1.test2
向上转型
子类继承于父类,子类可以向上转型为父类
父类 b=new 子类();
b是可以指向子类对象的
向上转型,在运行时,会遗忘子类对象中与父类对象中不同的方法,也会覆盖于父类中相同的方法——重写。
多态的实现条件
Java实现多态有三个必要条件:继承、重写和向上转型
实现方法
Java中多态的实现方法:继承父类进行方法重写,抽象类和抽象方法,接口实现。
抽象类
在定义类是,前面加上abstract关键字修饰的类叫抽象类。
接口
- 接口不能用于实例化对象
- 接口中方法只能是抽象方法、default方法、静态方法
- 接口成员是static final类型
- 接口支持多继承
多继承实现方法:
修饰符 interface A extends 接口1,接口2{
}
修饰符 class A implements 接口1,接口2{
}
内部类
将一个类的定义放在另一个类的定义内部,这就是内部类。而包含内部类的类被称为外部类。
内部类的主要作用如下:
- 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许用一个包中的其他类访问该类
- 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
- 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
- 内部类允许继承多个非接口类型
简而言之就是类中类
成员内部类的使用方法:
- 定义成员内部类后,必须使用外部类对象来创建内部类对象,即 内部类 对象名 =外部类对象.new 内部类();
- 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用this关键字
ps:成员内部类不能含有static的变量和方法,因为成员内部类需要先创建了外部类,才能创建他自己的。
静态内部类
静态内部类通常被称为嵌套类。
- 静态内部类不能直接访问外部类的非静态成员,但可以通过
new 外部类().成员
的方式访问。 - 如果外部类的静态成员与内部类的成员名称相同,可通过
类名.静态成员
访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可以通过成员名
直接调用外部类的静态成员。 - 创建静态内部类的对象时,不需要外部类的对象,可以直接创建
内部类 对象名=new 内部类();
局部内部类
局部内部类,是指内部类定义在方法和作用域中。
匿名内部类
匿名内部类,顾名思义,就是没有名字的内部类。正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写。但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口。
package
略