一、构造方法的问题
1、在创建有继承关系的子类对象时,一定会先执行父类中的构造方法(默认情况下JVM会执行的是父类中无参数的构造方法),然后再执行子类中的构造方法。
2、如果父类中此时不存在无参数的构造方法,那么在创建子类对象时,会提示编译错误;此时我们还想创建子类的对象,有两种解决办法:第一种,在父类中添加一个无参数的构造方法;第二种通过super(参数列表)明确告诉JVM调用我指定的构造方法来创建父类对象。
super(参数列表),只能出现在子类构造方法的第一句代码,表示在创建子类对象时,需要使用指定的构造方法来创建父类对象。
二、方法重写
条件:方法重写只能出现在有继承关系的子类中,而且是子类对父类方法的重写。
方法重写:
子类重写父类中的方法,必须要和父类中的方法名、参数列表完、返回值类型全一致,而且访问修饰符的范围不能缩小。
重写的目的:当父类中的方法无法满足子类的需求时,子类可以对其进行改造以达到子类的需求。其实是子类对父类功能的扩展
三、多态
同一个事物在不同的环境中有多种不同的表现形式。
多态有两种不同的表现形式:
方法重载
方法重写
向上转型,就是创建一个子类的对象,并赋值给父类对象。自动转换,因为父类就包含了子类。
向上转型的对象,就要把他当作父类对象来用,它可以调用父类中所有的普通属性和方法;但是如果用向上转型的对象,调用被子类重写的方法时,就会发生动态绑定(延迟绑定)机制,JVM会判断当前对象时谁创建的,谁创建的就调用谁里面的方法。
向下转型,就是把父类对象赋值给子类类型,但是一定是建立在向上转型的基础上,做类型的还原。
通过instanceof关键字,可以判断某个对象是否属于这种类型,用法:
对象名 instanceof 类名;返回的结果是boolean类型的。
发生多态的条件:
1、要有继承
2、要有重写
3、要有向上转型
4、要用向上转型的对象调用被子类重写的方法。
四、static关键字
static可以修饰成员属性、方法,所修饰的元素都属于类,而不属于某个对象。而且在进行
代码加载时,JVM就会立马给类中静态的元素进行内存空间的分配。
没有被static修饰的成员属性,称为实例属性,属于对象。
static修饰的元素特点:
1、 static修饰的属性和方法,无论创建多少个对象,它们只会被JVM加载一次
2、 static修饰的属性和方法,建议通过类名.属性名或者方法名的方式来调用。
3、 static修饰的属性和方法,分为称为静态属性和静态方法
4、 无论创建多少个类的对象,static修饰的属性和方法,只会被加载一次,而且他们
被所有的对象共享。
static修饰的方法,被称为静态方法,静态方法建议通过类名.方法名(参数列表)来调用
特点:
1、 静态方法中,只能调用静态的属性和静态的方法
2、 在非静态方法中,可以调用静态的方法和属性也可以调用非静态的属性和方法
3、 在静态方法中,无法使用this和super关键字
静态代码块,只能出现在类的内部,任何方法的外部。
语法:
static{
}
作用:给静态的成员属性进行初始化。
四、Object类
位于java.lang包中,它是Java中所有类的父类(根类、基类、超类);如果一个类没有明确指明它的父类,父类默认就是Object类。
public String toString()方法,返回当前对象的哈希码值16进制表示
public int hashCode()方法,返回当前对象的哈希整数值
五、访问修饰符
访问修饰符指的是元素可以被使用的范围。
private :它可以修饰属性、方法,修饰的元素只能在当前类中使用。
默认的:它可以修饰属性、方法,修饰的元素只能在当前类或当前同一个包中的 类。
protected:它可以属性属性、方法,修饰的元素只能在当前类或同一个包中的类,以及不同包中的子类。
public:公共的,它可以修饰属性、方法、类,修饰的元素可以被任何其它类来访问。
六、包
包主要是为了解决类命名冲突的问题
包是有层次结构的,包之间用.分割
创建包:
package 包名;
创建包的语句一定是java源文件的第一句代码
导包:当你使用的类和当前类不在同一个包下,需要导包。
语法:
import 包名.*; 或者 import 包名.类名;
import一定要位于package的下面。