如题: 一个类被声明成final后, 只是吥能被继承, 除了这个之外好像跟普通类没什么区别了!是这样的吗?

解决方案 »

  1.   

    貌似是这样final类中全是隐式的final方法,不知道这算不算是和普通类的区别
      

  2.   


    隐式的final方法?。 吥知道这说明什么问题, 既然类都吥能被继承了, 方法也就吥能被重写,隐吥隐 有何作用呢?》。 
      

  3.   

    final方法
    将方法声明为final,那就说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。另外有一种被称为inline的机制,它会使你在调用final方法时,直接将方法主体插入到调用处,而不是进行例行的方法调用,例如保存断点,压栈等,这样可能会使你的程序效率有所提高,然而当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,可能反而会影响效率,所以你要慎用final进行方法定义。final类
    当你将final用于类身上时,你就需要仔细考虑,因为一个final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。对于final类中的成员,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可以明确的给final类中的方法加上一个final,但这显然没有意义。
      

  4.   

    应该还能快一点吧,如果确定不复用这个类用final修饰了的话
      

  5.   

    final类无法被继承。还有什么区别就不知道了
      

  6.   

    final类不能被继承,那么要写一个功能完全又非常完美的这样一个类也不容易吧
      

  7.   

    final 类很少被用到,JDK 中的 final 类也不是很多。实际开发中也很少会去写 final 类的。
      

  8.   

    如果类不是final的话,equals方法就要仔细设计了.
      

  9.   

    举个简单的,类可以继承时equals设计不好的例子/**
     *
     * @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;
        }
    }
      

  10.   

    设计一个适合所有子类的equels方法是很难的,一般设计equels方法的时候都会根据业务来设计,通常给父类一个类似id的属性来区分各个实例,这样在设计上较为简单,不要去比对众多属性也不用去预测将来子类中可能新加的属性,就算不用id属性,也会尽量把对象区分属性写在父类中。
    而且在实现equels方法的同时导致的还要实现hashcode方法,一般认为当equels返回true的时候hashcode方法返回的值也要相同,否则相反。
    于此同时toString方法也将要覆盖掉。
    以上只是代码开发一个原则,并不强制要求实现,在很多业务中只要那个类不存在对象比对与对象信息通用抽取则不用实现。
      

  11.   

    ZangXT举的例子不错.
    也可以优化
      

  12.   

    在一个完美的设计中,应该只有两种类:abstract类或者final类。因为从某种意义上说,如果一个类不是final的,那么它就一定具有某种抽象性,应该设计成abstract的。Java之父都说了,Java中的继承或多或少是有害的。一个好的设计中应该大量使用final类。
      

  13.   

    这个世界上没有完美的设计,一个设计的开始并不能够真正的预测出将要出现的所有变化,如果实现类都设计成final,那么将导致无法再原有设计上进行扩展的可能性。虽然很多时候很多类不会再出现下一个层次的继承,但是也没必要非要定义成final,很多事情绝对化以后就会变得不好,即使那种思想是正确的,和理想的。
    因此就算在jdk内部出现的final类也很少,final类型的出现只有在那种不允许继承的情况下才使用,而不会在不需要继承的情况下使用。因为需要是不断变更的。
      

  14.   

    按照重写的equals代码所说,是不是还是没有真正比较出,这个student中的zhangsan是不是person中的zhangsan,所以说这个equals没设计好
      

  15.   

    按照重写的equals代码所说,是不是还是没有真正比较出,这个student中的zhangsan是不是person中的zhangsan,所以说这个equals没设计好
      

  16.   

    因为它不符合equals方法的设计约定。
    如果x.equals(y)为true,则y.equlas(x) 为true。
      

  17.   

    这是equals考虑的问题,不管类是否final吧;
      

  18.   

    如果类是final的话,这个方法容易设计的多。
      

  19.   

    为了安全,final很常用的吧...