抽象类和接口

抽象类

关键字:abstract
注意:不能有static修饰

接口

关键字:interface
用于解决不能多重继承的问题
注意:接口修饰符只能是默认的或public的
            接口中的变量自动设置为static public final的。
            接口定义的方法都是抽象的,自动设置为public的。
接口实现:implements 一个类可以实现多个接口

比较

一个类可以实现多个接口,但是只能继承一个抽象类。
抽象类可以有非抽象的方法,而接口中定义的方法必须全是抽象方法。
在抽象类中定义的方法,他们的修饰符可以是public、protected、private,也可以是默认值,但是在接口中所有的方法必须是public.
抽象类可以有构造函数,接口不能。两者都不能实例化,但是都能通过他们来存放子类对象或者是实现类的对象。可以说他们都可以实现多态。

克隆

clone( ) 需实现Cloneable接口

package com.mypackage.interfaced;


public class Human implements Cloneable{
 String name;
 String sex;
 int age;
 
 Human(){}
 
 Human(String name,String sex,int age){
this.name = name;
this.sex = sex;
this.age = age;
 }


 void work(){}
 void eat(){}
 
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
Human h = null;
try{
h = (Human)super.clone();
}
catch(CloneNotSupportedException e){
e.printStackTrace();
}
return h;
}
}

Human zhangyu = new Human("zhangyu","nv",24);
Human lala = (Human)zhangyu.clone();
lala.name = "lala";
System.out.println("lala:"+lala.name);
 System.out.println("zhangyu:"+zhangyu.name);

但是这样只是完成了浅拷贝,对于可变对象变量,他只能获得对象的地址,原对象和克隆得到的对象仍然包含的可变对象仍指向同一个对象,所以改变其中一个对象仍会改变另一个。但是String虽然作为对象出现,但是由于他的不可变性,所以在克隆中String不会产生问题。解决方法是对该对象变量也实现克隆。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值