A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁培育 中级黑马   /  2012-5-27 18:17  /  2651 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看了毕老师的ppt发现一个问题自己回答不了,求高手指教,abstract关键字不可以和哪些关键字共存?

6 个回复

倒序浏览
其实你问的回答很简单:abstract类不可以和this,super关键字共存。

但是如果只是这样告诉你,还是没解决你的问题。我这而多说点:
abstract,意思是抽象的,你可以理解为“看不懂的”,为什么跟this,super就不能共存难,原因是:既然看不懂了,那么生成出对象就没有意义了。所以带abstract修饰的类是不能创造出对象的。
没有对象的abstract类,就不能使用代表当前“对象”的this,super替代关键字就可以理解了。
回复 使用道具 举报
本帖最后由 whocases 于 2012-5-27 18:40 编辑

刚好我会这个问题。我来忽悠下,看你的抗忽悠能力如何
abstract 抽象类,必须被子类继承;
final修饰的类,则是个最终类,不允许继承(私有类默认都是final修饰的。)
static修饰的类是静态类;静态类加载到内存中,内存中独一份。
abstract跟final是一对敌人。abstract和static也算是一对敌人。

忽悠完毕。说多了就漏了。你想,你好好想。。。。

我这人就爱多嘴:
1. 抽象类中如果所有的方法都是抽象的话, 正好跟接口相似。那么他们的关系如何。。。。(接口就是个特殊的抽象类,但是别的类是通过implements实现它,抽象类呢是通过extends继承;)
2.还有就是abstract好像只能修饰类和方法吧。我没见过修饰别的东东。不过final则还可以修饰变量,这个变量也就变成了-----常量;

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1,private。abstract是为了让子类去复写抽象类的抽象方法的,当抽象方法被定义成private,子类无法复写。
2,static。抽象类不能定义为static。凡是被static修饰过的类,成员等,他们随着类加载而被加载到内存的方法区里,优先于对象建立。抽象类的抽象方法是没有方法体的,编译会报错。
3,final。同private,子类无法复写抽象类的方法。
回复 使用道具 举报
这个问题很好理解的,被abstract修饰类,最后要被子类继承,肯定会产生对象的,所以没继承之前和对象有关的特有关键字都不能和abstract共存,this、super、final,至于static关键字,有2种情况如果abstract和static同时修饰方法是非法的,如果abstract修饰类,类中有static的非abstract方法,是可以编译通过的,希望对你有帮助
回复 使用道具 举报
abstract 修饰符可以用于类、方法、属性、事件和索引指示器(indexer),表示其为抽象成员     abstract 不可以和 static 、virtual 一起使用     声明为 abstract 成员可以不包括实现代码,但只要类中还有未实现的抽象成员(抽象方法),那么这个类就是一个抽象类,抽象类的对象就不能被实例化,通常用于强制继承类必须实现某一成员.抽象类是必须要派生子类的。并且,如果子类没有实现抽象基类的所有方法,则子类也成为一个抽象类     1,只要有一个或一个以上抽象方法的类,必须用abstract声明为抽象类;  2,抽象类中可以有具体的实现方法;  3,抽象类中可以没有抽象方法;  4,抽象类中的抽象方法必须被它的子类实现,如果子类没有实现,则该子类继续为抽象类  5,抽象类不能被实例化,但可以由抽象父类指向的子类实例来调用抽象父类中的具体实现方法;通常作为一种默认行为;  6,要使用抽象类中的方法,必须有一个子类继承于这个抽象类,并实现抽象类中的抽象方法,通过子类的实例去调用;
    还有,this 可以与abstract共存。如果定义了一个类,如下:
   abstract class Book
      {
          int bookPage;
          float discount;
          double price;
         public Book(int bookPage,float discount)
         {
           this.bookPage=bookPage;
           this.discount=discount;
            }
}
这种定义方式是成立的。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
王月 中级黑马 2012-5-27 23:45:21
7#
别只看ppt,看毕老师的教学视频才是王道,仔细看,不懂就多看几遍。

你要知道abstract只能修饰类和成员方法。而抽象类一定要被继承来实现它的抽象方法,所以肯定不能和private、final修饰。而且不能和static共存,他们本就不能在一起。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马