【介绍】java学习过程中重点知识的总结-第三天
回顾
·多态,向下转型具体什么时候用
复习:
1.多态的使用前提:
a.必须有继承或者实现
b.必须有方法的重写
c.表现形式:
父类类型 变量名 = new 子类类型();
接口类型 变量名 = new 实现类类型();
2.多态的成员的特点
使用多态调用成员变量:编译看左边,运行看左边
使用多态调用成员方法:编译看左边,运行看右边
3.多态的弊端:
不能调用子类特有的成员方法,只能调用父类共有的成员方法
4.如果就是想调用子类特有的方法,怎么办?
向下转型,把父类类型的变量,转会到对应的子类类型上
·接口有什么构造方法吗?抽象类?有什么作用?
接口没有构造方法
抽象类是有构造方法的
因为所有的类,都有一个共同的父类
例:public class Person implements Police{
public Person(){
super();
}
}
·this和super的语句形式
this():调用本类构造方法
super():调用父类的构造方法
this()和super()不能同时出现在一个构造方法的第一行
1.static
a.什么时候用static来修饰成员
当这个成员不属于某一个对象,而是属于所有对象。或者属于这个类,南无需要static来修饰它
b.被static修饰的成员有什么特点
i.存在方法区中的静态区,只有一个空间
ii.静态时有限于对象存在
iii.如何访问静态成员:
对象名.静态成员; //这是可以的,但是不建议
类名.静态成员; //建议使用
2.final
final 修饰类(太监类) 不能被继承(没有子类) 但是可以是其他类的子类
final 修饰方法(最终方法) 子类不能被重写
final 修饰成员变量
a.这个成员变量在创建对象之前必须初始化
(直接复制,在构造方法中赋值)
b.只能赋值一次
final 修饰局部变量
a.基本类型
该变量只能赋值一次(实际上就是常量)
b.引用类型
该引用类型的变量保存的地址不能改变
但是地址指向空间中的内存可以改变
final Person p = new Person();
p = new Person();错误的
p.name = ;正确的
p.age = 18;正确的
3.包
导包的关键字 import
全限定类名 包名.类名(可以不用导包)后期说反射,用到全限定类名
4.权限修饰符
public protected default(默认,可以不写) private
如果一个成员指向在本类中使用 用private修饰
如果一个成员只想在本类中和本包中使用 不写修饰
如果一个成员只想在本类中和本包中或者其他包的子类中使用 用protected修饰
如果一个成员想在所有类中都可以使用 用public修饰
5.内部类
根据内部类定义位置不同的分类
a.成员内部类定义类中方法外
在其他类中如何创建该类的对象
固定格式
外部类名.内部类名 变量名 = new 外部类()/new内部类();
b.局部内部类定义方法中
在其他类中,是无法使用的
只能局部位置使用
6.静态代码快
代码块,在成员位置使用大括号括起来的一堆代码
public class Person{
静态代码块
static{
代码块
}
public void show(){
}
}
·特点
1.当我们使用到一个类时,那么这类中的静态代码块自动执行
2.只会执行一次,第一次使用该类,就立刻执行
3.在同一个类中,静态代码块的优先级很高,比构造方法优先,比main方法优先
4.作用
用来初始化类中某些功能(mysql的数据库驱动的加载)
7.匿名内部类
a.作用
快速创建 抽象类的子类对象,接口的实现类对象.
b.格式
第一种
new 抽象类(){
重写抽象类中所有的方法
};
第二种
new 抽象类(){
重写抽象类中所有的方法
}.重写后的方法();
第三种
接口类型 变量名 = new 接口(){
重写接口中所有的方法
};