JAVA核心学习:接口、继承与多态(上)

1. 类的继承

子类可以继承父类原有的属性和方法,也可以增加原来父类不具备的属性和方法,或者直接重写父类中的某些方法。

在继承中,还有一种特殊的重写方式,子类与父类的成员方法返回值、方法名称、参数类型及个数完全相同,唯一不同的是方法实现内容,这种特殊的重写方式被称为重构。

1.1 extends关键字

在这里插入图片描述
例子:
首先,创建一个Computer类:

package JAVALearining;

public class Computer {//父类 电脑
	String screen = "液晶显示屏";  //成员属性
	
	void startUp() {
		System.out.println("电脑正在开机,请稍等……");  //成员方法
	}

}

然后,创建一个Pad类,继承Computer类:

package JAVALearining;

public class Pad extends Computer{//子类 平板电脑
	

}

然后,再创建一个Demo类,实例化Computer类和Ipad类,并输出电脑的显示屏信息:

package JAVALearining;

public class Demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Computer com = new Computer();
		Pad ipad =new Pad();
		System.out.println(com.screen);

	}

}

得到结果:

液晶显示屏

同样,使用子类调用父类的方法,可以得到:

package JAVALearining;

public class Demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Computer com = new Computer();
		Pad ipad =new Pad();
		System.out.println(com.screen);
		com.startUp();
		
		System.out.println(ipad.screen);
		ipad.startUp();

	}

}

结果:

液晶显示屏
电脑正在开机,请稍等……
液晶显示屏
电脑正在开机,请稍等……

下面,为ipad子类添加特有的属性和方法:

package JAVALearining;

public class Pad extends Computer{//子类 平板电脑
	String battery = "5000毫安电池";
	
	void open3G() {
		System.out.println("打开3G网络……");
	}

}

在Demo中输出相关的属性和方法:

package JAVALearining;

public class Demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Computer com = new Computer();
		Pad ipad =new Pad();
		
		ipad.open3G();
		System.out.println(ipad.battery);
	}

}

得到结果:

打开3G网络……
5000毫安电池

注意:子类没有权限调用父类中被修饰为private的方法,只可以调用父类中修饰为public和protected的成员方法。

1.2 方法的重写

重写(还可以称为覆盖)就是子类中将父类的成员方法的名称保留,重写成员方法的实现内容,更改成员方法的存储权限,或是修改成员方法的返回值类型。
在这里插入图片描述
我们分别在Computer类和Ipad类中增加一个showPicture方法,并在ipad类中对方法进行重写:

void showPicture() {
		System.out.println("台式机电脑:双击打开图片。");
	}
void showPicture() {
		System.out.println("平板电脑:用手指点击触摸屏。");
	}

在Demo中调用computer类和ipad类中showPicture方法:

package JAVALearining;

public class Demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Computer com = new Computer();
		Pad ipad =new Pad();
		com.showPicture();
		ipad.showPicture();

	}

}

得到结果:

台式机电脑:双击打开图片。
平板电脑:用手指点击触摸屏。

1.3 super关键字

在这里插入图片描述
分别在Computer类和Pad类中添加sayHello方法:

	String sayHello() {
		return "欢迎使用";
	}
	String sayHello() {
		return "欢迎使用"+"平板电脑";
	}

在Demo中调用computer类和ipad类中sayHello方法:

package JAVALearining;

public class Demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Computer com = new Computer();
		Pad ipad =new Pad();
		
		System.out.println(com.sayHello());;
		System.out.println(ipad.sayHello());
	}
}

得到结果:

欢迎使用
欢迎使用平板电脑

如果将父类中的“欢迎使用”改为“welcome”,因为子类重写了方法,不会改变。如果想改变的话,可以在子类调用原有方法:
父类:

	String sayHello() {
		return "welcome to use";
	}

子类:

	String sayHello() {
		return super.sayHello()+"平板电脑";
	}

Demo:

package JAVALearining;

public class Demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Computer com = new Computer();
		Pad ipad =new Pad();
		
		System.out.println(com.sayHello());;
		System.out.println(ipad.sayHello());	
	}
}

结果:

welcome to use
welcome to use平板电脑
public class Pad extends Computer{//子类 平板电脑
	String battery = "5000毫安电池";
	
	public Pad() {
		super();    //调用父类方法 初始化,注意必须放在第一行
		this.screen = super.screen; //调用父类屏幕属性
	}
	
	void open3G() {
		System.out.println("打开3G网络……");
	}
	
	void showPicture() {
		System.out.println("平板电脑:用手指点击触摸屏。");
	}
	
	String sayHello() {
		return super.sayHello()+"平板电脑";
	}
}

在这里插入图片描述

2. Object类

在Java中,所有的类都直接或间接继承了java.lang.Object类。Object类是比较特殊的类,它是所有类的父类,是Java类层中的最高层类。用户创建一个类时,除非已经指定要从其他类继承,否则它就是从java.lang.Object类继承而来的。
在这里插入图片描述

2.1 getClass()方法

是Object类定义的方法,它会返回对象执行时的Class实例。语法如下:

getClass().getname();
package JAVALearining;

public class NewDemo {

	public static void main(String[] args) {
		Object[] arr = new Object[4];
		
		arr[0] = new Object();
		arr[1] = new String("字符串");
		arr[2] = new Integer(3);
		arr[3] = new NewDemo();

		
		for(Object obj:arr) {
			System.out.println(obj.getClass().getName());
		}

	}

}

得到结果:

java.lang.Object
java.lang.String
java.lang.Integer
JAVALearining.NewDemo

2.2 toString()方法

将一个对象返回为字符串形式,它会返回一个String实例。

public class NewDemo {

	public static void main(String[] args) {
		Object[] arr = new Object[4];
		
		arr[0] = new Object();
		arr[1] = new String("字符串");
		arr[2] = new Integer(3);
		arr[3] = new NewDemo();

		
		for(Object obj:arr) {
			System.out.println(obj.toString());
		}
	}
}

得到结果:

java.lang.Object@4361bd48
字符串
3
JAVALearining.NewDemo@53bd815b

因为没有重写,所以最后一个返回的是类。下面重写一下:

public class NewDemo {

	public static void main(String[] args) {
		Object[] arr = new Object[4];
		
		arr[0] = new Object();
		arr[1] = new String("字符串");
		arr[2] = new Integer(3);
		arr[3] = new NewDemo();

		
		for(Object obj:arr) {
			System.out.println(obj.toString());
		}
	}
	@Override  //输入toString,然后Alt+/
	public String toString() {
		// TODO Auto-generated method stub
		return "我是Demo类";
	}
}

得到结果:

java.lang.Object@4361bd48
字符串
3
我是Demo类

2.3 equals()方法

比较两个对象是否相等,主要比较的是两个对象的地址是否相等。

首先,创建Person类,并将对象强制转换成Person类,设置判断相同的条件:

public class Person {
	String name;
	String id;
	
	@Override
	public boolean equals(Object obj) {
		Person p = (Person) obj; //强制转换成人类对象
		boolean b1 = this.name.equals(p.name);
		boolean b2 = this.id.equals(p.id);
		return b1&&b2;
	}

}

然后,在Demo类中输入对象的信息:

public class Demo {

	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = new Person();
		Person p3 = new Person();
		
		p1.name = "小明";
		p1.id = "123";
		
		p2.name = "小红";
		p2.id = "123";
		
		p3.name = "小明";
		p3.id = "456";
		
		System.out.println(p1.equals(p2));
		System.out.println(p2.equals(p3));
		System.out.println(p1.equals(p3));
		
	}

}

执行结果如下:

false
false
false

如果将p3的信息进行修改:

p3.name = "小明";
p3.id = "123";

得到结果:

false
false
true
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值