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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

      1.抽象类,静态类,接口和继承有什么区别,他们都各自实现了什么样的功能?用在什么地方?
      2.在抽象类中可不可以定义静态类,静态方法,接口,以及静态类能否继承非静态类?
      3.静态类中可不可以定义抽象类,接口?
      4.接口中能否定义静态类?如果某个类中实现了某个接口,那么在这个类中那些方法需要被重新改写?
      5.如果子类继承了一个抽象类,那子类中能否定义静态方法,子类中又需要覆盖父类的那些方法?
这几个问题是让我很头痛的问题,也很专业,请高手赐教!!!尽量讲解详细一点,有实例代码演示更好  

评分

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

查看全部评分

7 个回复

倒序浏览
抽象类里面可以有非抽象方法,但接口里只能有抽象方法,静态类表示类中所有的成员都必须是静态的.
继承就是有2个相近的类,他们之间有很多共同的特点,被继承的类即为父类,继承类为子类,子类拥有了父类的方法,子类可以修改扩展父类,从而具有更多的功能,其实个人认为继承就是让代码变的简单了,减小了工作量。  
//生物类
abstract class Organism{
  String typeName;//属性名字
  abstract void organism();//繁殖方法
}
//动物类继承生物类
abstract class Animal extends Organism{
  //已继承父类的typeName属性和organism方法
  abstract void move();//移动方法
}
//狗类继承自动物类
class Dog extends Animal{
  public void organism(){
    //实现狗的繁殖方法
  }

  public void move(){
    //实现狗的移动方法
  }
}


评分

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

查看全部评分

回复 使用道具 举报
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能

在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不

能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中

实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的

,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现

特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象

类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用

来决定某对象的类是否实现了接口。

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 谢述华 于 2012-5-20 01:13 编辑

高手谈不上,一起探讨下啊。
1、有抽象方法的类就是抽象类,不能实例化。继承抽象类并覆写其抽象方法可以得到非抽象类,抽象类中全部为静态抽象方法我们可以将其定义为接口。
静态类为静态方法组成的类,同样不能被实例化。
抽象类是为了简化非抽象类的构建(继承相当于将父类代码全部拷贝出来),静态类可以视为方法工具类,方便类进行操作。
类和类之间用继承,非抽象方法可以直接使用;类和接口是实现关系,方法全部是抽象方法,必须子类实现,故用了更确切的关键字implements。
2、抽象类可以定义静态类和静态方法并被继承。抽象类的静态方法可以直接引用,而不用实例化父类(见interface代码示例),抽象类内部定义接口也没有限制。
静态类一般作为内部类,如图能继承非静态类,但是不能使用起方法。
3、这个问题学术型太强,静态类能定义抽象类和接口,不过由于即使继承了也不能实例化,所以并无实际作用。
4、接口可以定义静态类,并且直接引用。接口的内容可以被 被引用类覆写,就像我们经常覆写toString一样。
5、子类不受父类的限制,当然可以添加静态方法。如果想实现实例化目标,必须将父类的抽象类覆写(继承有点拷贝的意思),否则继承了抽象方法不能实例化。
希望能对你有帮助,献上代码:
  1. public class luck {
  2.                
  3.             public static void main(String[] args) {
  4.              Inter.inner inn=new Inter.inner();
  5.                     System.out.println(inn.x);
  6.              InterImp imp=new InterImp();
  7.                     imp.method();
  8.                 }
  9.             static class son{
  10.                     abstract class s{}
  11.             }
  12.         }
  13. class fat{
  14.                 static void met(){
  15.                         System.out.println("y");
  16.                 }
  17.         }
  18.         interface Inter{
  19.                 int num=6;
  20.                 abstract void method();
  21.                 class inner{
  22.                         int x=1;
  23.                 }
  24.         }
  25.         class InterImp implements Inter{
  26.                 public void method(){
  27.                         System.out.println("x");
  28.                 }
  29.         }
复制代码

静态类无法继承非静态类成员.png (5.75 KB, 下载次数: 16)

静态类无法继承非静态类成员.png

评分

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

查看全部评分

回复 使用道具 举报
1.抽象类,静态类,接口和继承有什么区别,他们都各自实现了什么样的功能?用在什么地方?
抽象类

   (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法
   (2) 抽象类不能被实例化
   (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类
   (4) 具体派生类必须覆盖基类的抽象方法
   (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们

接 口

   (1) 接口不能被实例化
   (2) 接口只能包含方法声明
   (3) 接口的成员包括方法、属性、索引器、事件
   (4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员。如:
静态类 :被static修饰的类,不能被实例化。
       2.在抽象类中可不可以定义静态类,静态方法,接口,以及静态类能否继承非静态类?
抽象类中可以定义静态类,静态方法,接口,静态类能继承非静态类
       3.静态类中可不可以定义抽象类,接口?
        不能,
       4.接口中能否定义静态类?如果某个类中实现了某个接口,那么在这个类中那些方法需要被重新改写?
接口中能定义静态类,如果某个类中实现了某个接口,需要复写父类的抽象方法,
       5.如果子类继承了一个抽象类,那子类中能否定义静态方法,子类中又需要覆盖父类的那些方法?
子类可以定义静态方法,子类需要复写父类的抽象方法,

评分

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

查看全部评分

回复 使用道具 举报
     抽象类中可以存在非抽象成员或者类,抽象类中的抽象方法,只能有方法的申明,不能有具体的实现,抽象类不可以直接被实例化,它可以使用多态的形式,父类指向子类的应用。子类继承父类后,必须全部实现父类中的抽象方法,否则该子类也只能是抽象类.
     接口是一种特殊的抽象类,接口中声明的所有方法都是抽象的。使用interface关键字定义一个接口。 定义接口使用的关键字是interface。
             对于接口当中常见的成员:而且这些成员都有固定的修饰符。
                    全局常量。public static final
                    抽象方法。public abstract
           由此得出结论,
                  接口中的成员都是公共的权限,权限都是最大的。
                  类与类之间是继承关系,类与接口之间是实现关系。
                  接口不可以实例化。 只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化,否则,这个子类就是一个抽象类。
          在Java中不直接支持多继承,因为会出现调用的不确定性,所以Java将多继承机制进行改良,在Java中变成了多实现。
                     一个类可以实现多个接口。一个类在继承另一个类的同时,还可以实现多个接口。
                    接口的出现避免了单继承的局限性。接口与接口之间是继承关系,而且接口可以多继承。
           接口的特点:
                     接口是对外暴露的规则。                     
                     接口是程序的功能扩展。
                     接口的出现降低耦合性。
                     接口可以用来多实现。
                     类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
                     接口与接口之间可以有继承关系。

      抽象类和接口的异同点:
            相同点:都是不断向上抽取而来的。
           不同点:
                1,抽象类需要被extends继承,而且只能单继承。
                      接口需要被implements实现,而且可以多实现。
                2, 抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。
                      接口中只能定义抽象方法,必须由子类去实现。
                3,  抽象类的继承,是is a关系,在定义该体系的基本共性内容。
                      接口的实现是like a 关系,在定义体系额外的功能。、
                4,抽象类中的变量和方法没有默认修饰符,接口中的变量默认为public static final的,
                     接口中的方法默认为public abstract
                5,一个类只能继承一个抽象类,一个类可以实现多个接口

        什么时候使用抽象类,什么时候使用接口
               如果能用接口,就不用抽象类,因为别人实现接口可以不占用继承的位置。
               如果定义一个抽象的父类,其中所有方法都是抽象的,那么就定义为接口。
              如 果定义一个抽象的父类的时候,需要有不抽象的方法,那么只能定义为抽象类。

      2.在抽象类中可不可以定义静态类,静态方法,接口,以及静态类能否继承非静态类?
        抽象类中可以定义静态类,静态方法,接口。但是注意了不能定义静态的抽象方法。
        总觉得这几个问题纠结在一起有点别扭。呵呵。
        静态类能继承非静态类,体现了程序的扩展性么。
       3.静态类中可不可以定义抽象类,接口?
        不能,个人是这么理解,被static修饰的类或者成员,不需要创建对象就可以直接使用,这也就是无法继承和复写或者是实现抽象类或者接口中的方法,失去了意义。
       4.接口中能否定义静态类?如果某个类中实现了某个接口,那么在这个类中那些方法需要被重新改写?
          接口中能定义静态类,这时候该静态类就相当于该接口中的一个静态成员。
          如果某个类中实现了某个接口,需要复写父类中全部的抽象方法,否则该子类也会变成抽象类。
       5.如果子类继承了一个抽象类,那子类中能否定义静态方法,子类中又需要覆盖父类的那些方法?
         子类是否定义静态方法,跟继承没有任何关系,继承只是为了获取到父类中的某些成员,所以可以写。
         只要涉及到说子类继承抽象类,那么子类就需要实现父类中的所有的抽象方法,否则子类会变成抽象类。




评分

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

查看全部评分

回复 使用道具 举报
1.抽象类,静态类,接口和继承有什么区别,他们都各自实现了什么样的功能?用在什么地方?
      1   含有抽象方法的类 必须是抽象类,抽象类可以有自己的普通方法。接口是一个特殊的抽象类,所有方法都是抽象的。 他们的的抽象方法就是为了让子类去实现,且子类必须实现。 在java中 静态类是内部类的一种。继承是一个类 拥有另一个类的属性和方法的一种实现方式,java 不允许多继承,但可以通过实现多个接口的方式来达到多继承的目的,所以在实际开发中,能用接口就不要用继承。

2.在抽象类中可不可以定义静态类,静态方法,接口,以及静态类能否继承非静态类?
       在抽象类中可以定义静态类  静态方法 接口。 静态类可以继承非静态类

3.静态类中可不可以定义抽象类,接口?
   都可以
     
4.接口中能否定义静态类?如果某个类中实现了某个接口,那么在这个类中那些方法需要被重新改写?

  接口中可以定义静态类 。  实现了接口  接口中所有方法都要被重写  如果是抽象类实现接口则需要其子类重写接口的方法
5.如果子类继承了一个抽象类,那子类中能否定义静态方法,子类中又需要覆盖父类的那些方法?
   可以定义静态方法。只需要重写父类的抽象方法




回复 使用道具 举报
1.抽象方法
只有方法名和传入参数,没有实现内容。
例如有一个方法c如下:
public void c(String printText) {
    System.out.println(printText);
}
对应的抽象方法就是:
public void c(String printText);
但抽象方法只能放在“抽象类”和“接口”中

2.接口类,接口类里面只能放抽象方法,需要实现类来实现接口的抽象方法。
接口的目的有点类似书本的“目录”所起的作用,用户只需要关注方法实现了什么功能,而不用去关注具体实现方法的内容。
常见的例子有:
Set<String> set = new TreeSet<String>();
Set<String> set = new HashSet<String>();
同一个接口,则必须接口规定的固有属性,Set接口就是唯一性。
不同实现类,则具备不一样特殊属性:
TreeSet具备自动排序功能,但不能保存null
HashSet无序,但能存null
另外,一个实现类可实现(implements)多个接口类,但必须实现所有接口里面的所有抽象方法。

3.抽象类,夹在一般类和接口中间,可放普通方法,也可放抽象方法,但抽象方法必须加abstract。
例如:
abstract public void test();
抽象类如果被一般类所继承(extends),则一般类必须实现抽象类的抽象方法。

4.继承,所有类之间都有可以有一个继承关系,但要注意以下几点:
1>接口类只能继承接口类,可多继承
2>除接口类以为的所有类,只能单继承,即只能继承一个类,并且不能继承接口!
3>一般而言继承之后,子类就拥有父类的方法,但如果父类有方法是私有的,则即使继承也无法调用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马