欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java学习笔记_11 final、super、向上造型

程序员文章站 2022-03-23 23:00:50
final经典面试题:final关键字的特点?final修饰的变量:不能被更改。final修饰的方法:不能被重写。final修饰的类:不能被继承。static final 配合修饰常量。package day11_9;public class FinalDemo {final static int a = 1;//static final 配合修饰常量。public static void main(String[] args) {FinalDem...

final

经典面试题1:final关键字的特点?

			final修饰的变量:不能被更改。
			final修饰的方法:不能被重写。
			final修饰的类:不能被继承。
			static final 配合修饰常量。

经典面试题2:String类能不能被继承?

			不能。String类被final修饰的。
package day11_9;

public class FinalDemo {
	final static int  a = 1;//	static final 配合修饰常量。
	public static void main(String[] args) {
		FinalDemo f = new FinalDemo();
		System.out.println(a);
		//f.a = 2;//不注释会报错,因为a为final类型,无法被更改。
	}
}

运行 结果:

1

super

super指代父类的对象。
super方法,可以调用父类的构造方法,根据super方法的参数列表确定具体调用哪一个构造方法

经典面试题:
问:this()和super()可不可以同时出现?

不能。因为this()和super()都必须放在构造方法的第一行。有冲突,二者不能同时出现。

向上造型:父类声明子类对象。

子类的对象可以向上造型为父类的类型。即父类引用子类对象,这种方式被称为向上造型。

父类声明子类对象:ex:Father s = new Son();

该对象(S)拥有的属性和方法都是父类的。但是当调用子类重写父类的方法时,编译期间执行的是父类的方法,运行期间执行的是子类的方法。
这是因为:
向上造型后 ,子类将不再具备其自己定义的方法,只有父类的方法。但若重写了父类的方法,向上造型的对象的方法为重写后新的方法。

		Father s = new Son();

注意:在new Son()的时候由于继承关系,new关键字调用Son的构造方法( Son() ),Son()先后分别打印了

		这是父类的有参构造方法
		这是子类的无参构造方法

下面:当调用子类重写父类的方法时(子类、父类中都有一个work方法),编译期间执行的是父类的方法,运行期间执行的是子类的方法:

		Father s = new Son();
		s.work();//重写了父类work(),s的方法就为重写后新的方法。

运行结果:

		这是父类的有参构造方法
		这是子类的无参构造方法
		儿子的工作是快乐长大

下面加入:

		Father  d;
		d = new Daughter();

输出多出:

		这是父类的构造方法

下面加入:

		Son s1 = new Son();
		Son s2 = new Son();
		Daughter d1 = new Daughter();
		Daughter d2 = new Daughter();

输出多出:

		这是父类的有参构造方法
		这是子类的无参构造方法
		这是父类的有参构造方法
		这是子类的无参构造方法
		这是父类的构造方法
		这是父类的构造方法

向上造型的意义:

为了以后写代码时拓展方便,以后万一还有别的子类,我们需要改的地方就少了。

完整代码:
Father:

package day11_9;

public class Father {
	String name;
	int age;
	public Father(){
		System.out.println("这是父类的构造方法");
	}	
	
	public Father(String name, int age) {
		super();//调用Object中的构造方法
		this.name = name;
		this.age = age;
		System.out.println("这是父类的有参构造方法");
	}

	public void work(){
		System.out.println("父亲的工作是挣钱养家");
	}
	
}

Son:

package day11_9;

public class Son extends Father {
	char sex;
	
	public Son(){
		super("小明",8);//给父类赋值
		//super();//隐藏的,默认存在
		System.out.println("这是子类的无参构造方法");
	}
	public void work(){
		super.age = 49;//只要调用了这个构造方法,Father的age就会被更改为49
		System.out.println("儿子的工作是快乐长大");
	}
}

Daughter:

package day11_9;

public class Daughter extends Father {

	char sex;
	String happy;
	
	public void work(){
		System.out.println("美美的长大");
	}
	public void interesting(){
		System.out.println("喜欢跳舞、画画");
	}
	
}

Test:

package day11_9;

public class Test {

	public static void main(String[] args) {
		//使用向上造型的方式创建对象
		Father s = new Son();
		//new关键字调用son的构造方法(创建对象、传值),创建son的对象。赋值给了Father。
		
		s.work();
		//s.age = 18;
		System.out.println(s.age);//上面调用work()构造方法时,Son中的super.age = 49;改变了Father的age
		Father d;
		d = new Daughter();
			
		Son s1 = new Son();
		Son s2 = new Son();
		Father d1 = new Daughter();
		Daughter d2 = new Daughter();
		
		Father [] fs = {s1,s2,d1,d2};
		/**
		 * 飞机大战:
		 *	敌机(父类):小型敌机(子类)、奖励型敌机(子类)、Boss机(子类)
		 * 
		 * 	父类[] f;
		 * 	对f的长度扩容1个单位。
		 * 	把生成的子类敌机放在数组的最后一个元素的位置。 
		 */	
	}
}

输出结果:

这是父类的有参构造方法
这是子类的无参构造方法
儿子的工作是快乐长大
49
这是父类的构造方法
这是父类的有参构造方法
这是子类的无参构造方法
这是父类的有参构造方法
这是子类的无参构造方法
这是父类的构造方法
这是父类的构造方法

个人学习笔记,若有误还望不吝赐教。

本文地址:https://blog.csdn.net/qq_45909299/article/details/109633337

相关标签: Java