java基础知识之抽象类于接口

抽象类需要注意的几个点

抽象方法不能包含在非抽象类里,如果抽象父类的子类不能实现所有的抽象方法,那么子类也要声明为抽象类
抽象类是不能用new 操作符来初始化的,但是仍然可以定义它的构造方法,这个构造方法在它的子类的构造方法中调用
包含抽象对象的类必须是抽象的
子类的父类是具体的,这个子类也可以是抽象的
子类可以覆盖父类的方法并将它定义为抽象的
抽象类虽然不能new,但是可以作为一种数据类型



今天翻书的时候还看了clone这个知识点,顺便贴下总结和代码及运行结果


克隆,需要注意克隆的是内容相同的对象但不相等。域对象数据被克隆,但是它们可以相等,比较克隆对象内容是否相等需要重写equal方法
如果要想一个对象可以被克隆,那么它必须实现Cloneable接口

package 接口与抽象类;

public class testClone {
	public static void main(String[] args) throws CloneNotSupportedException {
		Mike mike = new Mike();
		mike.setName("mike");
		mike.setAge("21");
		mike.setCar(new Car("AJ",2000));		
		Mike mike2 = (Mike)mike.clone();
		System.out.println(mike2==mike);
		System.out.println(mike2.equals(mike));
		System.out.println(mike2.getCar()==mike.getCar());
		System.out.println(mike);
		System.out.println(mike2);
	}
}
package 接口与抽象类;

public class Mike implements Cloneable{
	private String name;
	private String age;
	private Car car;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public Car getCar() {
		return car;
	}
	public void setCar(Car car) {
		this.car = car;
	}
	@Override
	protected Object clone() throws CloneNotSupportedException {
		// TODO Auto-generated method stub
		return super.clone();
	}
	public Mike(String name, String age, Car car) {
		super();
		this.name = name;
		this.age = age;
		this.car = car;
	}
	public Mike(){}
	@Override
	public String toString() {
		return "Mike [name=" + name + ", age=" + age + ", car=" + car + "]";
	}
	


   //重写equals方法,因为我们要对比的是Mike类中的值而不是对象的引用地址
    //如果传递的是Object类的话,我们就需要重写hashCode()方法,这样就比较麻烦
	
	public boolean equals(Mike obj) {
		if(this.getAge().equals(obj.getAge())&&this.getName().equals(obj.getName())&&this.getCar()==obj.getCar())
			return true;
		return false;
		
	}
}

最后说一下接口和抽象类的一点简单区别
接口和抽象类的区别

在变量方面,抽象类对变量没有什么特别的要求,但是接口要求所有的变量必须是public static final 且所有的方法必须是公共的抽象的实例方法 
PS:java只允许为类的扩展做单一继承,但是允许使用接口做多重扩展

最后看到一个包装类,简单提一下!
每一个数值包装类都是有抽象类Number扩展而来的

所有的拆包方法都在这个类里定义了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值