| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1439 人关注过本帖
标题:java新手,想求解一下java基础知识
只看楼主 加入收藏
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
结帖率:85.71%
收藏
 问题点数:0 回复次数:1 
java新手,想求解一下java基础知识
这是一个本身没有什么真正逻辑的程序,只是为了运用知识而写,就想问下表情位置为什么不能编译?
package 多态;

abstract public class Animal {//抽象类和抽象方法表示不一样,注意
    public int i=1;//public 代表存取权限的一个等级,其等级最高,private的等级最低
    public abstract void eat();//抽象方法必须有抽象的类,没有花括号
    public abstract void roar();
 public static class dogs extends Animal implements Pet{
     public void eat(){
     System.out.println("I am a dog so"+"I eat shit!");
     System.out.println(i);//测试下能否继承实例变量
 }
     public void roar(){
     System.out.println("RUFF!");
     }
     public void ask(){//测试能否加入新方法
     System.out.println("What's my name?");
     }
     public void pet(){
     System.out.println("I am a pet!");
     }
}
 public static class cats extends Animal implements Pet{
     public void eat(){//方法的覆盖,如是同名字不同参数,不同返回类型,则是overload,即重载
     System.out.println("I am a cat so I eat fish");
     System.out.println("you are right!");//测试能否在引用父类方法的情况下,加上额外的行为
     }
     public void roar(){
     System.out.println("Miao!");
     }
     public void pet(){
     System.out.println("you creat a right cat!");
     }
 }
public static interface Pet{//设置接口,连接cat和dog,注意接口的方法一定是抽象的,且所关联的类必须覆盖全部的抽象方法
     public abstract void pet();
}
public static void main(String args[]) {//每个main函数必须有String args[],它代表一个数组,用来接受输入的参数,可以用args[0]等得到输入内容,又因为java里只有一种main(函数,其它函数不能识别
    Animal [] animal=new Animal[3];
    animal[0]=new dogs();
    animal[1]=new cats();
    animal[0].eat();
    animal[0].roar();
    animal[0].pet();
    animal[1].eat();
    animal[1].roar();
   
    }

}
系统提示表情位置编译错误,该如何改才能调用子类dogs的pet和ask方法?
搜索更多相关主题的帖子: abstract java基础 private package public 
2017-03-18 23:14
梦月神游
Rank: 2
来 自:灵界-异空间
等 级:论坛游民
威 望:4
帖 子:23
专家分:98
注 册:2017-3-11
收藏
得分:0 
回复楼主:animal[0].pet();不能实现的原因是animal[0]的抽象类没有具体实现pet()的方法!
  
 解决方案:可以把animal[0]的类型强制转换为Pet型。
 具体实现方案:
   
    if (animal[0] instanceof Pet) //其中这里的instanceof关键字是用来判断animal[0]指向的实例是否包含了Pet接口。
      ((Pet)animal[0]).pet();          //把animal[0]强制转换成Pet接口型才能调用接口Pet里面的抽象方法pet()。
      
 在这里顺便另外回答楼主一个问题:不能调用animal[0].ask()的原因是该类方法不是抽象方法,而是具体方法。
 如果楼主希望调用该具体方法,可以考虑把animal[0]强制转型为dogs型的才能调用该方法。
 具体实现: ((dogs)animal[0]).ask();
      
对于抽象方法与接口之间的关系要弄清楚。调用接口里面的抽象方法是学Java的一个重点内容,这个是要掌握的。
具体点来说就是根据调入接口的对象不同,调用同一个接口的同一个抽象对象的入口也会不同。
这有利于实现多态。
      
 如果想单纯获取接口调用方法可以考虑通过申明接口变量来进行接口回调。
例如:   
    Pet animal=new dogs();
        animal.pet();
      
这样同样也能实现接口功能,可以直接调用该端口,但该方法只能调用pet()方法而不能调用dogs()的其它方法。
      
归纳:如果要调用某一个类(接口)里面的方法,则要将该类的数据类型转换成调用方法包含的数据类型。
      
在这里,不得不提楼主写程序有详细的注释,有利于理解性学习,在这里要赞一个。如果楼主多点上机实践,
相信会对知识点有更深入的理解。
      
最后,祝楼主学习能更上一层楼,朝着自己的理想目标前进!
      
2017-03-21 05:13
快速回复:java新手,想求解一下java基础知识
数据加载中...
 
   



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

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