如题: 一个类被声明成final后, 只是吥能被继承, 除了这个之外好像跟普通类没什么区别了!是这样的吗?
解决方案 »
- 闲的无聊,大家来写个小程序玩吧。
- 请教一个字符串的解析
- 一个非常简单的问题,请大家指点下!!!
- 就剩下10可用分了,LinkedList 问题 如果嫌分少 我再申请个ID 把分都给你
- 我用JAVA做APPLICATION的时候,连接数据库,我怎么样才能把表中的信息现实在SWING中的TEXTAREA中啊???解决马上给分!!!!
- java.lang.NullPointerException问题
- java字符串中"的处理方法
- 在Fram窗体中怎样画图?谢谢 请教了! 谢谢
- 急!关于sdk环境配置的很奇怪的问题,大家帮帮我这个初学者吧。
- 一段很简单的代码,高手帮忙看下!
- 如何判断xml节点里是否有内容
- 反斜杠 报错问题
隐式的final方法?。 吥知道这说明什么问题, 既然类都吥能被继承了, 方法也就吥能被重写,隐吥隐 有何作用呢?》。
将方法声明为final,那就说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。另外有一种被称为inline的机制,它会使你在调用final方法时,直接将方法主体插入到调用处,而不是进行例行的方法调用,例如保存断点,压栈等,这样可能会使你的程序效率有所提高,然而当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,可能反而会影响效率,所以你要慎用final进行方法定义。final类
当你将final用于类身上时,你就需要仔细考虑,因为一个final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。对于final类中的成员,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可以明确的给final类中的方法加上一个final,但这显然没有意义。
*
* @author ZangXT
*/
public class Main{
public static void main(String[] args) {
Person person=new Person("zhangsan",21);
Student student = new Student("zhangsan",21,20080152);
System.out.println(person.equals(student));
}
}
class Person{
private String name;
private int age; public Person(String name, int age) {
this.name = name;
this.age = age;
} @Override
public boolean equals(Object obj) {
if(this==obj){
return true;
}
if(obj instanceof Person){
Person anotherPerson = (Person)obj;
return (this.name.equals(anotherPerson.name)&&this.age==anotherPerson.age);
}
return false;
}}
class Student extends Person{
private int id; public Student(String name,int age,int id) {
super(name,age);
this.id = id;
}
}
而且在实现equels方法的同时导致的还要实现hashcode方法,一般认为当equels返回true的时候hashcode方法返回的值也要相同,否则相反。
于此同时toString方法也将要覆盖掉。
以上只是代码开发一个原则,并不强制要求实现,在很多业务中只要那个类不存在对象比对与对象信息通用抽取则不用实现。
也可以优化
因此就算在jdk内部出现的final类也很少,final类型的出现只有在那种不允许继承的情况下才使用,而不会在不需要继承的情况下使用。因为需要是不断变更的。
如果x.equals(y)为true,则y.equlas(x) 为true。