精华内容
下载资源
问答
  • 在animal类中重载了shout方法,但子类dog和cat中重写shout方法报错

    在animal类中重载了shout方法,但子类dog和cat中重写shout方法报错

    展开全文
  • final修饰的类不能被继承验证 public class FinalTest { public static void main(String[] args){ Parent parent = new Son(); System.out.println(parent.getAge()); } static final class Parent { ...

    本来想试试final能不能被重载,后来想想还是都整理一下吧。

    1. final修饰的类不能被继承验证

      public class FinalTest {
          public static void main(String[] args){
              Parent parent = new Son();
              System.out.println(parent.getAge());
          }
      
          static final class Parent {
              private int age;
      
              public final int getAge() {
                  return age;
              }
          }
      
          static class Son extends Parent {
      
          }
      }
      

      结果:编译不通过

      java: 无法从最终FinalTest.Parent进行继承
      
    2. final修饰的方法不能被重写

      static class Parent {
          private int age;
      
          public final int getAge() {
              return age;
          }
      }
      
      static class Son extends Parent {
          @Override
          public int getAge() {
              return super.getAge();
          }
      }
      

      结果:编译不通过

      java: FinalTest.Son中的getAge()无法覆盖FinalTest.Parent中的getAge()
        被覆盖的方法为final
      

      补充:final修饰的方法能否被重载

      public class FinalTest {
          public static void main(String[] args){
              Parent parent = new Parent(3);
              System.out.println(parent.getAge());
              System.out.println(parent.getAge(5));
          }
      
          static class Parent {
              private int age;
      
              public Parent(int age) {
                  this.age = age;
              }
      
              public final int getAge() {
                  return age;
              }
      
              public final int getAge(int age) {
                  return age;
              }
          }
      }
      

      结果:可以

      3
      5
      
    3. final修饰的变量:

      1. 基本类型不能更改值

        public class FinalTest {
            public static void main(String[] args){
                final int a = 5;
                a = 10;
            }
        }
        

        结果:不行

        java: 无法为最终变量a分配值

      2. 对象数据类型不能修改指向,但是可以修改内容

        public class FinalTest {
            public static void main(String[] args){
                final int[] a = {1,2,3};
                a = new int[5];
            }
        }
        

        结果:不行

        java: 无法为最终变量a分配值

        public class FinalTest {
            public static void main(String[] args){
                final int[] a = {1,2,3};
                a[0] = 5;
                System.out.println(Arrays.toString(a));
            }
        }
        

        结果:可以修改内容

        [5, 2, 3]

    综上所述,其实final只是表示一种不可变的语义。对于对象来说,只是说指向对象的指针不能变,但是通过指针修改内容是可以的

    那么其实就有意思了,很多人说String只是因为value通过final修饰了,所以不可变。

    其实在effective java有介绍过,如果真的想要实现属性不可变

    1. 把属性设置为final
    2. 不要对外提供任何可以修改该属性的方法

    其实这就是String实现不可变的原因,没有提供任何可以修改的方法,并且本身使用final修饰来保证不会发生指向改变。

    展开全文
  • 首先我们先看下final在java中的作用 final在Java中可以用来修饰类、... final修饰方法可以被继承和重载,但不能被重写 3. final修饰的变量不能被修改,是个常量 举例说明: public class Person { private S...

    首先我们先看下final在java中的作用

    final在Java中可以用来修饰类、修饰方法和修饰变量

     1. final修饰的类,为最终类,该类不能被继承。如String 类
        
     2. final修饰的方法可以被继承和重载,但不能被重写
            
     3. final修饰的变量不能被修改,是个常量
    

    举例说明:

    public class Person {
    
        private String name;
        private int age;
        private String sex;
    
        final public void work(){ //final 修饰的最终方法 可以被子类继承,但不能被重写
            System.out.println("a person can do work");
        }
    
        final public void work(int age){ //重载一个final类
            System.out.println("a person can do another work");
        }
    
        public void eat(){   //普通方法  可以被子类继承、重写
            System.out.println("a person need to eat");
        }
    
        public static void sleep(){  //静态方法  可以被继承
            System.out.println("a person need to sleep");
        }
    }
    

    子类继承了父类Person 重写了父类普通方法eat() ,但不能重写父类final修饰的方法和静态方法

    public class Man extends Person{
        
        public void eat(){
            System.out.println("the man also need do eat");
        }
    
        public static void sleep(){
            System.out.println("the man also need to sleep");
        }
    
    }
    

    注意:
    在Java中静态方法可以被继承,但是不能被覆盖,即不能重写。
    如果子类中也含有一个返回类型、方法名、参数列表均与之相同的静态方法,那么该子类实际上只是将父类中的该同名方法进行了隐藏,而非重写。(比如子类Man 中的sleep方法)

    展开全文
  • static和final修饰方法

    千次阅读 2017-08-19 17:18:33
    static修饰的方法是静态方法,所有的对象共用一份,也就是共享方法。static方法是可以被继承,然后可以被...final修饰方法是不可变方法,final方法所在类被继承时,被final修饰方法是不能被重写的,但是可以重载

    static修饰的方法是静态方法,所有的对象共用一份,也就是共享方法。static方法是可以被继承,然后可以被重写和重载。

    final修饰的方法是不可变方法,final方法所在类被继承时,被final修饰的方法是不能被重写的,但是可以重载。

    展开全文
  • 这是一次阿里面试里被问到的题目,在我的印象中,final修饰方法是不能被子类重写的。如果在子类中重写final修饰方法,在编译阶段就会提示Error。但是回答的时候还是有点心虚的,因为final变量就可以用反射的方法...
  • final修饰的变量表示此变量是“最后的、最终的”含义。一旦定义了final变量并在首次为其显示初始化后,final修饰的变量值不可被改变。 所以,final修饰变量时就成了 常量(一旦赋值不能改变) 常量名一般要全部大写...
  • 使用final修饰方法

    万次阅读 2018-06-07 09:15:26
    Final修饰方法 final修饰方法 属性都表示其值不可变,也就是说类不可继承,方法不可重写,属性不可覆盖。 如果使用final修饰方法,那么表示该方法不能被重写,如果在父类中使用final修饰方法,那么该...
  • 至于返回值类型,访问修饰符与方法重载没有任何关系 可变参数列表 可变参数必须是最后一个参数 带可变参数的方法最后被访问(调用) 数组可以传给可变参数,反之不行 同类型数组与可变参数无法构成方法重载 ...
  • 这是一次阿里面试里被问到的题目,在我的印象中,final修饰方法是不能被子类重写的。如果在子类中重写final修饰方法,在编译阶段就会提示Error。但是回答的时候还是有点心虚的,因为final变量就可以用反射的方法...
  • 方法定义与重载 将相同的代码进行封装,通过调用使用,可以重用代码 方法的完整定义方式  修饰符 返回值类型 方法名(参数列表){  方法体  return 返回值  }   return :  1,为了将返回值交给调用...
  • final 修饰类、方法、变量,表示不可变的 final 修饰变量:不可变,必须赋初值。...final修饰的实例变量,要么在定义该实例变量时执行初始值,要么在普通初始化块或构造器中为该实例变量指定初始值。 final...
  • * final修饰变量和方法和类 * @author 110 * final关键字的作用: *1:修饰变量:被他修饰的变量不可改变,一旦赋了初值,就不能被重新赋值 *final int Max_speed= 100; *2:修饰方法:该方法不能被子类 重写,但是...
  • 1.final修饰变量,则等同于常量 2.final修饰方法中的参数,称为最终参数。 3.final修饰类,则类不能被继承 4.final修饰方法,则方法不能被重写。 ...final修饰方法可以被重载 但不能被重写
  • final关键字可以修饰类、方法、变量,当final修饰类、方法、变量时,分别表示:类不可被继承;方法不能被重写;变量值不能被更改。 final类 final修饰的类不能被继承,即不能有子类。当子类继承父类时,将可以直接...
  • 方法重载(overload)(在一个类中进行) * 方法的重写(Override) (前提:至少两个类 并且有继承关系) * 方法的重写 作用:相当于 对父类的该方法 进行升级 * 重写:跟父类的方法完全一致 * * 书写一个类 都...
  • 1. final修饰的类,为最终类,该...2. final修饰方法可以被继承和重载,但不能被重写 3. final修饰的变量不能被修改,是个常量 通俗易懂理的博客如下: https://www.cnblogs.com/chhyan-dream/p/10685878.html ...
  • final修饰: 1、修饰类表示不允许被继承。2、修饰方法表示不允许被子类重写,但是可以被子类继承,不能修饰构造方法。3、修饰变量表示不允许被修改 a)方法内部的局部变量,使用前被赋值即可(只能赋值一次),...
  • static和final能否修饰类,方法,属性

    千次阅读 2018-12-21 02:50:05
    可以修饰方法。 可以修饰属性。 1-1:修饰内部类后内部类有什么特点? 答:可以直接创建对象,创建方式如下 1-2:如果内部类没有被继承如果创建对象? 答:必须先new一个外部类对象,然后在对象.new 外部类创建 ...
  • java语言中final修饰的变量和方法 在Java中,final关键字可以用来修饰变量、方法和类。 1、修饰变量 (1)修饰后的变量会变成常量,定义的时候必须手动初始化,不可再重新赋值; final int NUM = 10; //重新赋值是不...
  • final方法不能被覆盖,可被重载(方法名相同而参数不同) Given: class Pizza { java.util.ArrayList toppings; public final void addTopping(String topping) {  // 这里不能用final,无法覆盖,应...
  • 定义:方法重写就是子类中出现了和父类一摸一样的的方法方法重写也叫方法覆盖,方法复写。 子类 区别:只有返回值和父类不同,其他的都是一摸一样的。 问题:静态成员方法算不算重写? 静态成员方法从本质讲的...
  • final关键字可修饰类、方法、变量

    千次阅读 2017-03-19 09:45:16
    A final修饰方法不能被重载 B final可以修饰类、接口、抽象类、方法和属性 C final修饰方法也不能被重写 D final修饰的量是常量,不可以修改 1.final可以用来修饰类、方法、变量,不能用来抽象类和接口2....
  • 全面理解Java中的final修饰

    千次阅读 2018-08-01 17:15:30
    final修饰符 final 可用于修饰类、变量和方法,用于表示它修饰的类、方法和变量不可改变。 final修饰的大都应用于基本类型域,或不可变类。 不可变类:如果类中的每个方法都不会改变其对象,这种类是不可变的类。...
  • Static 1,修饰变量 2,修饰方法 3,修饰类 4,修饰代码块 public class StaticTest { public static class InnerStaticTest{ public void print3(){ System.out.println("lalallalal"); } pub...
  • final修饰的Map集合可以被修改

    千次阅读 2020-05-11 09:35:27
    final就是的方法不能被重写,可以被重载final修饰的变量不可修改。 到这里是没有毛病的,但是为什么map就可以修改呢? 这里我在网上查阅了一些博客,资料说的是final修饰的变量不可被修改说的是 引用 不可被修改...
  • Question 1: 子类是否可以重写父类的final方法,答案是:不可以! 父类Person: ...子类是否可以重载父类的final方法,答案是可以的!...重载方法中 int ,char 如何自动适配重载函数的!
  • final修饰基本类型变量和引用类型变量的区别 “宏替换”的final final方法 final类 1.final成员变量 final指定的成员变量必须由程序员显式的进行指定初始值 归纳总结:final修饰的类变量,实例...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,095
精华内容 24,038
关键字:

final修饰的方法重载