java(类与对象、子类与继承)

在java课程学习之中对类与对象、子类与继承有一些更深的理解,记录在这篇博客中。

类与对象

(1)一个java文件里面只能有一个主类,主类即类前面加一个public修饰。
(2)实例方法既能操作实例变量和类变量(前面加static修饰),也能调用实例方法和类方法。类方法只能操作类变量和调用类方法。类变量在主函数第一次使用该类时就为它分配了内存空间,防止堆里面,该类创建的所有对象共同使用该类的类变量。
(3) 包语句:如果你导入(import)了两个包且他们的类名相同。方法有两种:①两个类创建对象的时候都加上前缀包目录,就不需要写import导入包语句了。②一个类使用import导入包语句,创建对象就可以直接使用类名(不用加目录前缀),如果你要用另一个创建对象则需要写上前缀包目录。
(4)构造方法匹配问题:如果你用类定义一个对象,但该类有多个构造方法,则根据参数个数和参数类型匹配。还有下列情况:①如果你定义了有参构造函数,编译器就不会给你生成无参构造函数,用该类创建对象时是不允许无实参的,如果要创建无参对象,就要自己在该类里创建无参构造函数。② 如果你在类中定义了参数的优先级高构造函数,在创建对象时就不能传优先级低的参数。③ 如果你创建的对象参数类型在类中的构造函数没有,则他会找到参数优先级比他高的构造函数。优先级如下:从左到右增高

byte short char int long float double

(5)类中的某一个构造函数调用其他构造函数,可以用 this(参数);函数语句,根据参数调用匹配的构造函数。但是不能用向优先级高的类型转换规则,会作递归调用处理。

子类与继承

(1)访问权限表(Y表示能访问,N表示不能访问)

内部类 本包 子类 外部包
public Y Y Y Y
protected Y Y Y N
friendly Y Y N N
private Y N N N

注意分析表的各个维度,例如:子类是可以访问不在同一包里的父类的protected变量或方法的。

(2)子类一定继承一个带无参构造函数的父类,没有无参构造函数的父类是不能被继承的,子类创建对象一定是先调用父类的无参构造函数再执行子类的构造函数。
(3) instanceof 用来判断左操作元对象是不是右操作元类创建的。子类创建的对象也是父类创建的。但是父类创建的对象,不是子类的对象。
(4)子类继承父类,则一定要满足下面条件中任意一条:①父类既没有无参构造方法也没有有参构造方法;②父类有无参构造方法,也要写无参构造方法;③父类有有参构造函数而没有无参构造函数,则子类的无参或有参构造函数的第一个语句一定是 super(参数); 这条函数语句。
(5)对象的上转型对象:父类创建的对象赋值给子类创建的对象(父类的引用指向子类的对象)。操作权限如图所示:

(6)final类:不能被继承;final方法:不予许子类重写,可以被继承;常量:放在堆里(变量放在栈中),一定要赋初值,不允许被修改。

abstract 类 和abstract方法

(1)abstract修饰符在修饰类时必须放在类名前。abstract抽象类,不能创建实例对象,列如动物这一类.
(2)abstract修饰方法,会使这个方法变成抽象方法,也就是只有声明(定义)而没有实现,实现部分以”;”代替。abstract修饰方法就是要求其子类覆盖(实现)这个方法。调用时可以以多态方式调用子类覆盖(实现)后的方法,也就是说抽象方法必须在其子类中实现,除非子类本身也是抽象类。父类是抽象类,其中有抽象方法,那么子类继承父类,并把父类中的所有抽象方法都实现(覆盖)了,子类才有创建对象的实例的能力,否则子类也必须是抽象类
(3)有抽象方法的类一定是抽象类。但是抽象类中不一定都是抽象方法,也可以全是具体方法。

你可以对我进行打赏哦