面向对象的三个特征:封装,继承,多态

构造方法(Constructor):创造对象,初始化对象信息

  • 没有显示的构造器,系统默认创建一个空参构造器
  • 显示定义构造器,系统就不会从创造默认空参构造器
  • 一个类至少有一个构造器(包括系统默认)

    1. <br /> 输出对象直接调用toString()方法

属性的赋值属性顺序

  1. 默认初始化<显示初始化<构造器<对象.方法,对象.属性

封装:

  • 高内聚:类内部数据操作细节自己完成,不允许外部干涉
  • 低耦合:仅对外暴露少量的方法用于使用
  • 不对外成员变量,不对外暴露方法,单例模式
  • 成员变量设置为private,通过方法来设置和获取值不让对象.属性调用修改和使用

修饰符的使用范围

修饰符 类内部 同包 不同包子类 不同包
private yes
缺省 yes yes
protected yes yes yes
public yes yes yes yes
    class只可以使用public,和缺省<br />        this.调用对象属性,方法,构造方法<br />        this(形参) 调用其他的构造方法(必须声明在构造器首行)

package 声明在源文件的首行
同一包下不能命名同名的的接口,类
每 . 表示一层目录

import 包声明和类之间
java.long包下定义的可以不用导包
本包下定义的也不用导
如果要使用不同包的中同一个名的类,至少有一个需要全类名方法显示(xxx.类名);
子包仍需要导入
inport static 可以导入指定类或接口中静态结构:属性或方法 ;

继承

  • 子类继承父类 ,子类就获取到了父类中声明的所有属性和方法(父类私有的方法,子类也获取到了,但是不能调用)
  • 子类可以有自己特有的功能;
  • 一个父类可以有多个子类
  • 一个子类只能有一个父类(不允许多重继承)
  • 子类直接继承父类以后,成为直接父类.间接继承的父类叫间接父类
  • 子类可以获取直接父类和间接父类的属性和方法
  • 任何类的父类都是Object ;Object的方法都可以用

step over 一行一行执行
step into 进入当前调用的方法中
step return 执行完当前代码,进入下一行
drop to frame 回到当前行所在方法的第一行
resume 执行当前所在代码,进入下一个断点,没有就结束

重写(override)

  • 对父类同名同参数的方法,进行覆盖操作.
  • 方法名和形参列表相同,
  • 子类重写的权限修饰符不能消减父类 方法的权限修饰符(private不能重写)
  • 返回值类型 父类返回值是void 重写只能void ;
  • 父类有返回值A类型 , 子类返回值可以是A类和A的子类
  • 父类返回值是基本类型,子类重写必须和父类一样一样
  • 子类重写的方法抛出的异常不大于父类方法的异常类型
  • 只有非static才能重写,static还是分别调用自己的

    super

  • 可以在子类中使用super.属性或则super.方法显式调用父类的方法

  • 子父类重名,可以用super指定调用哪个属性值
  • super.方法可以调用父类被重写的的方法;
  • super(形参列表)可以显式调用父类的构造器,且必须写在首行,与this(形参)二选一
  • 子类构造器没有显式this和super构造器,都会隐式调用super();
  • 当子类继承父类后,”继承”父类的属性方法,子类有必要知道对象如何进行初始化.无论那个构造器创建对象,需要保证初始化父类
  • 父类必须要提供一个空参构造器

多态

  • 前提继承,和重写方法
  • 父类的引用指向子类对象(父 f = new 子();)
  • 子类调用父类同名的方法,执行的子类重写的方法
  • 编译只能用父类的方法,执行就执行子类重写父类的方法(编译看左,运行看右)
  • 对象的多态志适用方法,不适合属性(属性都是看左边)
  • 多态是运行时行为, 调用编译期无法确定的,是运行是确定的,等到解释器才会确定调用的具体方法叫做动态绑定
  • 总是可以将子类实例转换父类变量,称为向上转型,子类特有功能不能访问
  • 创造了对象想要获取到子类的方法和属性 可以强制类型转换叫做向下转型(父类对象转换子类对象,前提是父类对象创造的是子类实例)
  • 强转过程异常ClasscastException中可以使用instanceof关键字判断
  • a instanceof A 判断a是不是A的实例,A也可以是a的直接和间接父类,不是返回false 是返回true;

      <br />**object**
    
  • equals() 例题3详情

  • toString() 输出对象引用,就是调用toString(); 一些类重写toString() 就会显示”实体信息”;

包装类

基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character

转换 注意NumberFormatException异常
基本—>包装类
int num = 1 ; Integer i= new Integer(num) ; 其中num可以装String 和自己对应的基本类型
自动装箱 : int num = 1 ; Integer i = num ;

包装类—>基本类型
Integer num =new Integer(x); int in = num.Intvalue() 就可以转换成基本类型,其中x可以对应的基本类型和String
自动拆箱 : Integer num =new Integer(x); int in = num ;

基本,包装类—>String类型
连接运算: int num = 10 ; String str = num + “” ;
调用String方法: int num = 10 ; String str = String.valueOf(num);
toString方法

String类型—>基本,包装类
String str = “123”; int num = Integer.parseInt(str);

static

  • 修饰属性,方法,代码块, 内部类
  • 静态变量被类中所有的对象共享,静态代码不能访问类中实例对象
  • 如果一个对象修改了静态的变量的值,同一个类的所有的对象都会受到影响
  • 对象不需要创建对象就可以调用方法和属性 类名.属性,类名.方法
  • 静态变量随着类的加载而加载,早于对象的创键.
  • 类只会加载一次,静态变量也只有一份,在方法区静态域中.
  • image.jpeg
  • 静态属性和方法不能使用this以及super关键字
  • 静态方法会被继承可以被子类调用
  • mian方法作为程序的入口,也是一个普通的静态方法
  • 操作静态属性的方法,通常为static

代码块

  • 用来初始化类和对象,只能使用static修饰
  • static代码块
    • 可以有输出语句
    • 随着类的加载而执行,只执行一次
    • 不能调用非静态的属性,方法
    • 作用:初始化类的信息
  • 非static代码块

    • 可以有输出语句
    • 随着对象的创建而执行
    • 每创建一次对象,就执行一次
    • 作用:在创建对象时,对对象的属性等进行初始化

      由父及子 静态先行
      默认初始化<显示初始化/代码块赋值(写的顺序 )<构造器<对象.方法,对象.属性

final

  • 修饰类,方法,变量
  • final修饰类不能被继承
  • 修饰方法不能再能重写
  • 修饰变量就是常量
  • 修饰局部变量
  • 修饰形参
  • static final 修饰方法,属性称全局常量
  • 显示初始化,代码块,构造器

抽象类(abstract)

  • 修饰类和方法
  • 不能实例化,提供子类,让子类实例化
  • 抽象方法没有方法体
  • 包含抽象方法的类一定是抽象类
  • 抽象类可以没有抽象方法
  • 重写了父类所有抽象方法,就可以实例化,要是没有也必须定义为抽象类
  • 不能和 private 和 static,final 共处

非匿名的类匿名的对象
抽象类 对象 = new 抽象类(){
重写方法 ;
}

内部类

在A类内部在声明一个类B, (A就是内部类,B就是外部类)
局部内部类(方法内,代码块,构造方法)和成员内部类(静态,非静态)

成员内部类

  • 调用外部类的结构
  • 可以static修饰
  • 4钟不同的权限修饰符
  • 类内可以定义属性,方法,构造器
  • 可以被final修饰
  • 可以被abstract修饰
  • 创建静态成员内部类的实例:外部类.内部类 对象 = new 外部类.内部类()
  • 创建非静态成员内部类:外部类 外部类对象 = new 外部类(); 外部类.内部类 内部类对象 = 外部类对象.new 内部类();
  • 内部类调用外部类的非静态属性 外部类类名.this.方法 ; 或者直接调用 ;