JAVA自学课程笔记3.1

本文介绍了Java中类的继承、方法重写和类型转换的概念,通过Test1到Test5的代码示例展示了不同情况下的运行结果。同时,讲解了equals方法的重写,强调了在比较对象内容时正确使用类型转换的重要性。
摘要由CSDN通过智能技术生成
20212201616分
JAVA自学课程笔记3.1

	Test1.java:
		class A{
		    public void f(){
			System.out.println("AAA");
		    }
		}

		class B extends A{
		    public void f(){
			System.out.println("BBB");
		    }
		    public void g(){
			System.out.println("CCC");
		    }
		}

		public class Test1{
		    public static void main(String[] args){
			B bb = new B();
			A aa = new A();
			aa = bb;
			aa.f();
			B bb2 = (B)aa;
			bb2.f();
		    }
		}
	//运行结果:
		BBB
		BBB
	
	Test2.java:
		class A{
		    public void f(){
			System.out.println("AAA");
		    }
		}

		class B extends A{
		    public void f(){
			System.out.println("BBB");
		    }
		    public void g(){
			System.out.println("CCC");
		    }
		}

		public class Test2{
		    public static void main(String[] args){
			B bb = new B();
			A aa = new A();
			//aa = bb;
			aa.f();
			bb = (B)aa;
			bb.g();
		    }
		}
	//运行结果:
		AAA
		Exception in thread "main" java.lang.ClassCastException: class A cannot be cast to class B (A and B are in unnamed module of loader 'app')
			at test1.main(test1.java:23)
		
	Test3.java:
		class A{
		    public void f(){
			System.out.println("AAA");
		    }
		}

		class B extends A{
		    public void f(){
			System.out.println("BBB");
		    }
		    public void g(){
			System.out.println("CCC");
		    }
		}

		public class Test3{
		    public static void main(String[] args){
			B bb = new B();
			A aa = new A();
			aa = bb;
			aa.f();
			bb = (B)aa;
			bb.f();
		    }
		}
	//运行结果:
		BBB
		BBB

	
	重写equal方法,通过判断元素的内容是否相同来返回truefalse(JAVA自学课程笔记6):
	Test4class A{
		    public int i;

		    public A(int i){
			this.i = i;
		    }

		    public boolean equals(Object obj){
			if(this.i == obj.i)
			    return true;
			else
			    return false;
		    }
		}

		public class Test4{
		    public static void main(String[] args){
			A aa1 = new A(2);
			A aa2 = new A(2);
			System.out.println(aa1.equals(aa2));
		    }
		}
	//输出结果:
		编译错误:找不到符号obj.i
		原因:父类指向子类之后,无法访问子类所特有的成员。
	
	Test5:
		class A{
			public int i;

			public A(int i){
				this.i = i;
			}

			public boolean equals(Object obj){
				A aa = (A)obj;		//obj是一切类的父类,当obj指向一个引用equal的子类时(即equal赋值				给obj),父类obj可以通过强制转换被一个子类指向(即赋值给一局部变				量子类)。总而言之,就是父类已经指向子类了,才可以强制转换。
							
							//aa是一个A类的对象,特有i,可以直接使用,可以用来和当前类this的i对比。
				if(this.i == aa.i)
					return true;
				else
					return false;
			}
		}

		public class Test5{
			public static void main(String[] args){
				A aa1 = new A(2);
				A aa2 = new A(2);
				System.out.println(aa1.equals(aa2));
			}
		}
	//输出结果:
		true

	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值