| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4080 人关注过本帖
标题:如何在静态类创建非静态对象?怎么在静态方法里引用 非静态子类 的方 ...
只看楼主 加入收藏
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:11 
如何在静态类创建非静态对象?怎么在静态方法里引用 非静态子类 的方法???
代码如下,表情位置编译错误,Dog是Animal的一个非静态子类,那么如何在静态的main方法里创建Dog对象呢?
上面是第一个问题,第二个问题:如何调用非静态子类里的非静态方法roar()???新手请多赐教
package 多态2;

public class Animal
{
    int i;
    public void roar()
    {
        System.out.println("Ruff!");
    }
    public class Dog extends Animal
    {
        public void roar()//静态方法不能被继承吗?对,也不能被覆盖,一般专业来说叫做被隐藏
        {
          System.out.println("I am a dog!");
          super.roar();//可以在子类方法中利用super引用父类方法
        }
    }
    public static void main(String args[])//这里如果用static ,表示静态方法,则其在类加载时就会分配内存,就是执行到这个类时,同时分配了内存,而类里面还有
    {                  //还有非静态成员,其必须在类的对象产生时才会分配内存,再通过类的对象去访问,也就意味着如果用dog a=new dog(),计算机在内存中找不到dog
        //定义的变量没有使用
        Dog a=new Dog();这里编译错误
    }
}
搜索更多相关主题的帖子: public package 如何 表情 专业 
2017-03-22 21:42
枫xby
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:82
专家分:371
注 册:2014-10-19
收藏
得分:5 
public class Animal
{
    int i;
    public void roar()
    {
        System.out.println("Ruff!");
    }
   
    public static void main(String args[])
    {               
        //定义的变量没有使用
        Dog a=new Dog();//这里编译错误
    }
}

//一个.java文件中只有一个public修饰的类  
class Dog extends Animal
{
    //这是重写父类的方法
    public void roar()
    {
      System.out.println("I am a dog!");
     
    }
}
2017-03-23 09:52
纵横阳仔
Rank: 7Rank: 7Rank: 7
来 自:自学成才的火星人儿
等 级:贵宾
威 望:26
帖 子:147
专家分:698
注 册:2016-10-20
收藏
得分:5 
我只能说写的一塌糊涂
什么叫静态类啊?我还没听过


[此贴子已经被作者于2017-3-23 11:17编辑过]

2017-03-23 11:16
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 3楼 纵横阳仔
恕我是新手,这个程序是没有逻辑的,只是为了想运用知识点随意写的,所以请不要从逻辑角度考虑。
其二,虽然我是新手,但静态类和静态方法是的确存在的,与静态方法和静态变量一样,带有static,如果我说的有错,请指点

............
2017-03-23 12:52
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 2楼 枫xby
多谢耐心指点,我懂你的意思了,但还有几个疑问:
1,你说一个java文件只能有一个public的类,但为什么我在源程序中用了两个public的类编译怎么没有错误?
还有既然编译没有错误,那么有一个public类和有两个或更多public类有什么区别?
2,我发现你把我设的子类提到父类外面去了,我想问,我把子类直接放到父类里,编译也没有错啊,那么两者有什么区别呢?
问题有些繁琐,请见谅!

............
2017-03-23 13:07
倾听心跳
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:153
注 册:2016-6-22
收藏
得分:5 
程序代码:

class Animal {
    void roar() {
        System.out.println("Ruff!");
    }
}

class Dog extends Animal {
    void roar() {
        super.roar();
        System.out.println("I am a dog");
    }
}

public class Example1 {

    public static void main(String[] args) {
        Dog a = new Dog();
        a.roar();
    }

}
2017-03-23 23:49
纵横阳仔
Rank: 7Rank: 7Rank: 7
来 自:自学成才的火星人儿
等 级:贵宾
威 望:26
帖 子:147
专家分:698
注 册:2016-10-20
收藏
得分:0 
回复 4楼 邹特强
静态类真的没有,static修饰的叫静态内部类,外部类不可以被static修饰
class A{
    static class B{
    }
    class C {
    }
    main(){
        B b = new A.B();           静态内部类
        C c = new A().new C();     成员内部类,系统默认 (new A()).new C();
   }
}
子类一般情况都在外面,(子类不能访问父类的私有成员)
放在里面的叫内部类,(如果你没学到内部类,那么你就定义错误了,否则你就搞混了)
内部类可以直接访问外部类的成员(包括私有成员),是不需要继承的.内部类的权限修饰符与外部无关,
内部类的东西还有许多,不一一列举了,内部类的使用不是用于子类继承父类,而是有其他的用处

[此贴子已经被作者于2017-3-24 12:11编辑过]

2017-03-24 10:19
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 7楼 纵横阳仔
嗯,大佬这么回答看得就很舒服,原谅我之前的一时气盛,大佬的回答的确很专业,是我学的还太少。
我还想问一个问题,就是我回复二楼提出的第一个问题,一个文件只能有一个public类的那个,能不能回答下?

............
2017-03-25 20:52
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 7楼 纵横阳仔
public class Animal
{
    int i;
    public void roar()
    {
        System.out.println("Ruff!");
    }
    public class Dog
    {
        public void roar()//静态方法不能被继承吗?对,也不能被覆盖,一般专业来说叫做被隐藏
        {
          System.out.println("I am a dog!");
          super.roar();//可以在子类方法中利用super引用父类方法
        }
    }
    public class Cat
    {
        public void Miao()//静态方法不能被继承吗?对,也不能被覆盖,一般专业来说叫做被隐藏
        {
          System.out.println("I am a cat!");
          super.roar();//可以在子类方法中利用super引用父类方法
        }
    }
    public static void main(String args[])//这里如果用static ,表示静态方法,则其在类加载时就会分配内存,就是执行到这个类时,同时分配了内存,而类里面还有
    {                  //还有非静态成员,其必须在类的对象产生时才会分配内存,再通过类的对象去访问,也就意味着如果用dog a=new dog(),计算机在内存中找不到dog
        //定义的变量没有使用
    }
}
还有,运用你说的静态内部类和成员内部类的概念,
把表情位置的代码改变成如上,
那么分别怎么调用方法roar()和Miao()啊,我试了几下,不知道怎么调用

............
2017-03-25 21:05
HolyOrder
Rank: 3Rank: 3
等 级:论坛游侠
威 望:6
帖 子:47
专家分:140
注 册:2017-2-6
收藏
得分:5 
Dog类属于成员内部类,调用内部类时用
类名.内部类名
例如:Animal am = new Animal();
    am.Dag.roar();
还有,super语句必须写在方法的第一行。
2017-03-26 18:24
快速回复:如何在静态类创建非静态对象?怎么在静态方法里引用 非静态子类 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015849 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved