多态
1)含义:
同一个动作作用于不同的对象产生不同的行为。eg:吃饭
2)优点:
降低了程序之间的耦合度
提高了程序的可扩展性
3)多态的类型:
----编译时多态:静态的,方法重载,(在编译时,调用相同的方法根据不同的形参区分)
----运行时多态:动态的,只有在运行期间才能确定使用的对象类型,(才能确定变量的引用是那个实例)
4)多态的必要条件
----继承:存在子类,父类继承关系
----重新:子类重新定义父类的方法(方法的覆盖)
----向上转型:父类的引用指向子类的实例 Person p = new Man();
5)多态的体现方式
----基于接口的体现方式
----基于继承的体现方式
6)对象的多态
----在编译时看等号左端,执行时看右边(编译时看父类,执行时调用子类方法)
7)==和equals方法的区别:
1)基本数据类型,==比较数值
2)引用数据类型,==比较地址
3)equals方法是Objet类的方法,他的底层实现是使用= =比较的
4)所有类都可以重写equals()方法,eg:String类中重写equals()是比较字符串的内容是否相同
8)多态的体现方式
1)基于继承的实现方式
----不同的子类重写父类的方法体现不同的形式
2)基于接口的实现方式
3.上转型和下转型
1)上转型:将子类对象交给父类引用,可以自动转化
2)下转型:强制类型转化
9)final关键字
1)所修饰的类不能被继承
2)所修饰的成员属性是常量,不能更改
----常量的命名规则,全部大写,如果多个单词组成,用下划线分开
----常量存储在方法区的常量池
3)所修饰的方法不能被重写
10)static关键字
1)修饰成员变量
----是一个类变量
----随着类的加载而产生,无论将来创建多少个对象,类变量只创建一次(保留一份)
----访问静态属性:类名.属性名
----所有的对象都可以共享静态的成员属性
----存储在方法区
----类变量(static修饰的变量):静态变量的生命周期–一直持续到整个"系统"关闭 (静态域)
2)修饰的成员方法
----是一个类方法
----访问静态方法:类名.方法名
----存储在方法区
----在静态方法里只能访问静态成员(如果访问非静态成员,只能通过实例化的对象访问)
----一般工具类中的方法都会声明为静态方法
3)静态的代码块
----语法格式:static { }
----随着类的加载而加载,只会执行一次
4)补充
实例变量的生命周期–当实例变量的引用丢失后,将被GC(垃圾回收器)列入可回收“名单”中,但并不是马上就释放堆中内存
11)可变参数
1)语法:数据类型…可变参数名称
2)可以接受任意个参数(0个或多个)
3)如果形参列表中既有普通的参数,也有可变参数,那么可变参数一定在最后声明
12)类型转化
1)基本数据类型转化
----自动类型转化:将容量小的数据类型转化为容量大的数据类型(相近的数据类型)
1B(byte,char)—>2B(short,boolean)—>4B(int,float)—>8B(long,double)
----强制类型转化:将容量大的数据类型转化为容量小的数据类型(相近的数据类型)
会导致精度丢失。
2)引用数据类型转化
----向上转型(自动类型转化):父类的对象指向子类的对象。Person p = new Man();
----向下转型:强制类型转化,Man man = (Man)p;
----如果两个类毫无关系,是不能进行转化。Man man = new Woman();//错误
----instanceof:用于比较类型