关于#java#的问题:想请教一下大家如何解决Java中变量无法被解析的问题

img

img


想请教一下大家是如何解决Java中的变量无法被解析的问题,谢谢啦

定义成 Apple类的成员变量,然后构造方法里 进行初始化

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7791021
  • 你也可以参考下这篇文章:【Java基础总结】剖析初识Java时那些困惑你我的牛马问题之:标识符,字面量,字符以及格式化占位符 Java中的基本数据类型和引用数据类型等基础语法总结
  • 同时,你还可以查看手册:java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-泛型是Java编程语言的一个强大功能。它们提高了代码的类型安全性,使更多的错误可以在编译时发现。-通用方法 中的内容
  • 除此之外, 这篇博客: java静态方法和静态属性到底能不能被继承?中的 java中的静态方法或是静态属性能不能被继承 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    先来做一个实验

    //父类
    class Father{
    
    	public static String str = "Father类中的静态属性";
        public  String s = "Father中的非静态属性";
    	public static  void fun(){
    		System.out.println("Father类中的静态方法");
    	}
    	public void f(){
    		System.out.println("Father中的非静态方法");
    	}
    }
    
    class Child1 extends Father
    {
    	public static String str = "Child1改写Father中的静态属性";
    	public String s = "Child1改写Father中的非静态属性";
    	public static  void fun(){
    		System.out.println("Child1改写Father中的静态方法");
    	}
    	public void f(){
    		System.out.println("Child1改写Father中的非静态方法");
    	}
    }	
    //完全继承,不修改
    class Child2 extends Father
    {
    }
    
    //定义测试类
    public class TestExtends
    {
    	public static void main(String[] args){
       System.out.println("*****************Child2 ch1 = new Child2() 完全继承******************");
    		//用子类实例化子类
       Child2 ch1 = new Child2();
       System.out.println(ch1.str);
       System.out.println(ch1.s);
       ch1.fun();
       ch1.f();
    
       System.out.println("*****************Father ch2 = new Child2() 完全继承 多态******************");
    
        //用父类引用指向子类对象
       Father ch2 = new Child2();
       System.out.println(ch2.str);
       System.out.println(ch2.s);
       ch2.fun();
       ch2.f();
    
    	System.out.println("***************Child1 ch3 = new Child1()(Child1中修改了)********************");
    
       Child1 ch3 = new Child1();
       System.out.println(ch3.str);
       System.out.println(ch3.s);
       ch3.fun();
       ch3.f();
    
       System.out.println("*****************Father ch4 = new Child1()(Child1中修改了) 多态******************");
    
        //用父类引用指向子类对象
       Father ch4 = new Child1();
       System.out.println(ch4.str);
       System.out.println(ch4.s);
       ch4.fun();
       ch4.f();
    
    	}
    }
    
    
    

    运行结果为:
    在这里插入图片描述

    结论:java中的静态属性和静态方法是可以被继承的,但是不能被子类重写

    原因:

    • java中的静态方法、静态属性都属于静态绑定,父类中的静态属性和静态方法是可以继承到子类中的,但是不能被子类重写或者是覆盖。多态是动态绑定…只有动态绑定才会形成多态。静态属性和静态方法只是可以继承并不会表现出出多态性。
    • 静态的(即被static修饰的)在编译期就绑定了,而实例化的时候时候,父类引用指向子类对象是运行期才绑定

    java不推荐用实例对象去调用静态方法、静态属性。所以个人认为纠结于静态方法能不能被重写意义并不大

  • 您还可以看一下 徐无忌老师的Java进阶高手课-深入浅出Java网络编程课程中的 案例实战:浏览器打开一个网址,整个过程是怎么样的?小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^