方法重载
形参列表不一致
-
方法名必须相同
-
参数列表必须不同
-
返回类型无要求
可变参数
Java允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法
例:public void Method(int...a){}
-
参数可以是0或任意多个
-
实参可以为数组
-
可变参数的本质就是数组
-
如果还有其他形参,可变参数必须放在最后
-
一个形参列表只能有一个可变参数
public class Demo11 { public static void main(String[] args) { HspMethod hspMethod = new HspMethod(); System.out.println(hspMethod.sum(1,5,6,8,7)); } static class HspMethod{ //可变参数 //...代表可变参数,类型是int,parametors可以接受多个int public int sum(int... parametors){ int sum = 0; //当做数组使用 for (int i = 0; i < parametors.length; i++) { sum +=parametors[i]; } return sum; } } }
访问修饰符
-
public 对外公开
-
protected 对子类和同一个包中的类公开
-
默认无修饰符 向同一个包的类公开
-
private 只有类本身可以访问,不对外公开
封装继承和多态
封装
-
将属性私有化(不能直接修改属性)
-
提供set方法,用于赋值
-
提供get方法,用于获取属性的值
继承
-
子类会自动拥有父类的定义的属性和方法
-
父类也叫超类,基类
-
子类又叫派生类
多态
方法或对象具有多种形态,多态是建立在封装和继承基础之上的
-
重写和重载就体现多态
-
对象的多态
-
一个对象的编译类型和运行类型可以不同
-
变异类型在定义对象时就确定了,不能改变
-
运行类型是可以变化的
-
编译类型 对象名 = new 运行类型
-
-
向上转型
-
父类的引用指向了子类的对象
-
可以调用父类中的所有成员
-
不能调用子类中特有的成员
-
-
向下转型
-
子类类型 引用名 = (子类类型)父类引用;
-
只能强转父类的引用。不能强转父类的对象
-
要求父类的引用必须指向的是当前目标类型的对象
-
可以调用子类类型中的所有成员
-
public class Demo11 { public static void main(String[] args) { Animal animal = new Cat(); Object obj = new Cat(); //多态的向下转型 //此时cat的编译类型是Cat 看左边 //运行类型也是Cat 看右边 //父类的引用必须指向当前目标类型的对象 //强转之后的animal仍然指向之前的cat对象 //新的cat1也指向该cat对象 Cat cat1 = (Cat) animal; Cat cat2 = (Cat) obj; ((Cat) animal).Catch(); ((Cat) obj).Catch(); } static class Animal{ } static class Cat extends Animal { public void Catch(){ System.out.println("我是mao"); } } }
访问属性值看编译类型
调用方法看运行类型
多态数组
数组的定义类型为父类类型,里面保存的元素实际类型为子类类型
多态参数
方法定义的形参类型为父类类型,实参类型允许为子类类型
动态绑定机制
-
当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
-
当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用
Obeject类详解
==和equals
==
-
判断基本类型,判断值是否相等
-
判断引用类型,判断地址相等
equals
-
是Obejct类中的方法,只能判断引用类型
-
默认判断地址是否相等,子类中重写该方法后可以用于判断内容是否相等
hashCode方法
-
提高哈希表的性能
-
两个引用,如果指向的是同一个对象,则哈希值肯定是不一样的
-
两个引用,如果指向的是不同对象,则哈希值是不一样的(在很小的概率下,有可能一样)
-
哈希值主要根据地址号来的,不能完全将哈希值等价于地址
toString方法
-
默认返回:类名+@+哈希值的十六进制,子类往往重写toString方法,用于返回对象的属性信息
-
返回该对象的字符串形式
-
打印或拼接对象时,都会自动调用该对象的toString形式
-
当直接输出一个对象时,toString方法会被默认的调用
finalize方法
-
当垃圾回收期确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法(何时使用)
-
对象被回收时,系统自动调用该对象的finalize方法,子类可以重写该方法,做一些释放资源的操作
-
GC机制是由系统决定,也可以通过System.gc()主动触发垃圾回收机制
断点调试
指在程序某一行设置断点,调试时(Buging时)程序到这一行就会停住,之后手动点击下一步