继承

子类

  • 代码示例
	public class Son extends Father{
		//代码
	}
  • 其中Son类是Father类的子类
  • 关键字extends表明构造一个新的类派生于一个已存在的类
  • 已存在的类称为父类或者基类
  • 新的类就成为子类或者孩子类,子类拥有更加丰富的功能
  • 子类可以继承父类的方法和属性

将通用的方法放在父类,特殊方法定义在子类

super

  • 用来调用父类中的方法,但是子类中也有同名方法,这时候可以使用super关键字来进行父类方法调用,从而区分父子类的方法,也就是子类覆盖父类方法

子类构造器

  • 可以使用super关键字来调用父类的构造器
  • 如果子类的构造器中没有显式调用父类构造器,默认调用父类无参构造器
  • 但是,如果父类没有无参构造器且子类构造器中没有显式调用父类其他构造器,会报出错误

this

引用隐式参数
调用本类其他的构造器

super

调用父类方法
调用父类构造器 ,在子类构造器中只能出现在第一句

多态

  • 一个对象变量可以指示多种实际的现象,称为多态
  • 父类对象变量可以音乐用任何子类的对象,但是不能反过来·

方法调用

  1. 编译器查看对象的声明类型和方法,编译器获得所有可能被调用的候选方法
  2. 编译器将查看调用方法时的参数类型,该过程称为重载解析。这一步,编译器已经获得需要调用方法名字和参数类型
  3. 如果是private方法、static方法、final方法或者构造器,编译器可以准确知道调用哪个方法,这种调用方式称为静态绑定
  4. 当程序运行且采用动态绑定,虚拟机一定调用与引用对象的实际类型最合适的那个类的方法。如果子类中定义了调用的方法,直接调用;否则会在其父类中寻找,以此类推

虚拟机预先为每个类创建了一个方法表,需要调用方法时候直接查找该表

  • 动态绑定最重要特性
    • 无需对现存代码进行修改,就可以对程序进行扩展

在覆盖方法时,子类方法不能低于超类方法的可见性

  • 如果需要进行对象的类型转换
  • 只能在继承层次内进行类型转化
  • 如果把父类转换为子类,在这之前应该使用instanceof进行检查

抽象类

  • 抽象类中可以存在抽象方法,具体数据和具体方法
  • 抽象类存放的是通用的属性和方法,不管是不是抽象的
  • 抽象类不可以被实例化

如果子类只实现部分的抽象方法,那么还是抽象类
如果子类实现全部抽象方法,那么就不是抽象类


prviate只对本类可见
protected对本包和所有子类可见
默认---对本包可见
public对所有类可见


Object类

  • 是所有类的超类
  • 可以使用Object类型的变量引用任何类型对象

equals方法

  • 用来检测一个对象是否等于另一个对象

特性

  1. 自反性
  2. 对称性
  3. 传递性
  4. 一致性
  5. 对于任意非空引用ii.equals(null)都应返回false

编写完美equals方法

  • 显示参数命名为otherObject,后面需要将它转换成另一个叫做other的变量
  • 检测thisotherObject是否引用同一个对象
  • 检测otherObject是否为null,如果是,返回false
  • 比较thisotherObject是否属于一个类
  • 将otherObject`转化为相应的类类型变量
  • 对所有需要比较的属性进行比较,使用==比较基本类型,使用equals比较对象属性。如果都匹配,返回true,否则反之。如果在子类中重新定义equals,就要在其中包含调用super.equals(other)

如果重新定义equals就必须重新定义hashCode

对象包装器和自动装箱

  • 需要将基本类型转换成对象
  • Integerint的包装类
  • Bytebyte的包装类
  • Shortshort的包装类
  • Longlong的包装类
  • Floatfloat的包装类
  • Doubledouble的包装类
  • Booleanboolean的包装类
  • Characterchar的包装类
	Integer n = 3;//自动装箱
	int a = n;    //自动拆箱,将3赋值给a

包装类引用可以为null,所以自动装箱有可能抛出NullPointerException异常


可变参数

  • 代码示例
	public class People{
		public People(String s, Object...args){
			//代码
		}
	}
	
  • 其中构造器中的...是表明可以接受任意数量的对象

反射

  • 能够分析类能力的程序

用途

  1. 在运行时分析类的能力
  2. 在运行时查看对象
  3. 实现通用的数组操作代码
  4. l利用Method对象

继承的设计技巧

  1. 将公共操作和属性放在父类
  2. 不要使用受保护的属性
  3. 使用继承实现is-a关系
  4. 除非所有继承的方法都有意义,否则不要使用继承
  5. 覆盖方法时,不要改变预期的行为
  6. 使用多态,而非类型信息
  7. 不要过多使用反射
posted on 2023-03-02 17:21  ZmBoy  阅读(29)  评论(0)    收藏  举报