类与对象
- 主类的创建:含main方法的类,一般只创建一个,用于集成
- 次类的创建:不含main方法的类,一般有多个,用于实现某一功能的模板
- 对象的创建:次类名 对象名 = new 次类名(); //默认对象名为次类名首字母小写,可以创建多个对象,用于实例
- 对象属性的调用:对象名.属性名
构造器
用来初始化对象的值。//使用new关键字,本质是在调用构造器
- 无参构造器:public 次类名(){}//若次类未创建任何构造器,则隐含创建一个无参构造器
- 有参构造器:public 次类名(参数列表){this.参数1 = 初始值1; this.参数2 = 初始值2; this.参数3 = 初始值3; }//必须先创建无参构造器
封装
高内聚,低耦合。
- 提高程序安全性,保护数据;
- 隐藏代码的实现细节,便于交互;
- 同一接口;
- 增加系统的可维护性;
封装属性
private 数据类型 属性名; //次类属性私有
get方法和set方法
public 返回值类型 方法名(){return this.属性名;}//方法名格式:get属性名(驼峰原则)。方法体可扩充
public void 方法名(参数列表){this.属性名 = 参数名;}//方法名格式:set属性名(驼峰原则)。方法体可扩充,如选择结构
继承
子类拥有父类的全部public属性和方法,可直接使用,父类不能调用子类的属性和方法
头部:子类 extends 父类名{
默认继承:所有类默认继承Object类
调用同名属性或方法
调用当前类的:this.
调用父类的:super.
调用构造器
调用当前类的:this()
调用父类的:super() //运行子类的无参构造器,默认增加先调用父类的无参构造器,调用父类有参构造器也必须放在子类的构造方法前。super()和this()不能同时存在。
重写方法
一般当父类的方法不满足子类或不需要时,重写父类的方法
父类名 父类对象 = new 子类名();
注意点
- 必须为子类重写父类的非static方法,且方法名、参数列表必须相同。
- 静态方法无法重写,调用时仍执行父类的方法。
- 修饰符范围必须相等或扩大:public>Protected>Default>private
- 抛出的异常必须相等或缩小
多态
父类名 父类对象 = new 子类名(); //创建型式和重写方法一样,重写是多态的一种。这里的父类对象是一个引用,指向子类(真实内存)
存在继承关系,对象的方法调用默认调用自己的或父类的,但满足重写条件时,优先执行重写。
类型转换
instanceof表达式
对象名 instanceof 类名:当对象名(引用)的指向类和类名的类存在继承关系值为true,不存在继承关系值为false(无法转换)。
自动转换
父类名 父类对象 = 子类对象;
强制转换
(子类名) 子类对象 = 父类对象;
static关键字
static{静态代码块}:优先且仅执行一次,和类一起加载
{匿名代码块}:执行顺序在静态代码块之后
构造器:执行顺序在匿名代码块之后
抽象类
特殊的父类,不能用new来创建实例对象,只能作为模板被子类继承。
public abstract class 抽象类名{声明变量;一般方法;abstract 返回值类型 抽象方法名(参数列表);}//抽象类的子类必须实现抽象方法或把自己创建为抽象类
接口
接口不是类,故不存在构造器,可以理解为抽象类的抽象
接口的创建
public interface 接口名 extends 父接口列表 {
public abstract 返回值类型 抽象方法名(参数列表);
public static 返回值类型 静态方法名(参数列表){}
public default 返回值类型 默认方法名(参数列表) {} }//删除线部分表示可以省略,接口内容默认public类型。
接口的实现
public class 类名 implements 接口列表{重写方法//必须显式使用public**; 自定义方法}**
内部类
java允许类的内部创建类,一般不推荐
- 成员内部类:类里第一层创建的动态类。作用:获取外部类的私有属性。
- 静态内部类:类里第一层创建的静态类。不能获取外部类的私有属性。
- 局部内部类:方法里创建类。
- 匿名内部类:new一个并列的类或当前类(没有被指向一个引用);new一个并列接口(没有被指向一个引用),并重写方法。隐藏返回一个匿名类。