黑马程序员技术交流社区
标题: 关于抽象,静态,继承,接口相互间的关联问题 [打印本页]
作者: 彩虹 时间: 2012-5-20 00:24
标题: 关于抽象,静态,继承,接口相互间的关联问题
1.抽象类,静态类,接口和继承有什么区别,他们都各自实现了什么样的功能?用在什么地方?
2.在抽象类中可不可以定义静态类,静态方法,接口,以及静态类能否继承非静态类?
3.静态类中可不可以定义抽象类,接口?
4.接口中能否定义静态类?如果某个类中实现了某个接口,那么在这个类中那些方法需要被重新改写?
5.如果子类继承了一个抽象类,那子类中能否定义静态方法,子类中又需要覆盖父类的那些方法?
这几个问题是让我很头痛的问题,也很专业,请高手赐教!!!尽量讲解详细一点,有实例代码演示更好
作者: 赵嘉男 时间: 2012-5-20 00:43
抽象类里面可以有非抽象方法,但接口里只能有抽象方法,静态类表示类中所有的成员都必须是静态的.
继承就是有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(){
//实现狗的移动方法
}
}
作者: 孙宇晨 时间: 2012-5-20 00:46
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能
在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不
能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中
实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的
,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现
特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象
类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用
来决定某对象的类是否实现了接口。
作者: xieshuhua 时间: 2012-5-20 01:05
本帖最后由 谢述华 于 2012-5-20 01:13 编辑
高手谈不上,一起探讨下啊。
1、有抽象方法的类就是抽象类,不能实例化。继承抽象类并覆写其抽象方法可以得到非抽象类,抽象类中全部为静态抽象方法我们可以将其定义为接口。
静态类为静态方法组成的类,同样不能被实例化。
抽象类是为了简化非抽象类的构建(继承相当于将父类代码全部拷贝出来),静态类可以视为方法工具类,方便类进行操作。
类和类之间用继承,非抽象方法可以直接使用;类和接口是实现关系,方法全部是抽象方法,必须子类实现,故用了更确切的关键字implements。
2、抽象类可以定义静态类和静态方法并被继承。抽象类的静态方法可以直接引用,而不用实例化父类(见interface代码示例),抽象类内部定义接口也没有限制。
静态类一般作为内部类,如图能继承非静态类,但是不能使用起方法。
3、这个问题学术型太强,静态类能定义抽象类和接口,不过由于即使继承了也不能实例化,所以并无实际作用。
4、接口可以定义静态类,并且直接引用。接口的内容可以被 被引用类覆写,就像我们经常覆写toString一样。
5、子类不受父类的限制,当然可以添加静态方法。如果想实现实例化目标,必须将父类的抽象类覆写(继承有点拷贝的意思),否则继承了抽象方法不能实例化。
希望能对你有帮助,献上代码:- public class luck {
-
- public static void main(String[] args) {
- Inter.inner inn=new Inter.inner();
- System.out.println(inn.x);
- InterImp imp=new InterImp();
- imp.method();
- }
- static class son{
- abstract class s{}
- }
- }
- class fat{
- static void met(){
- System.out.println("y");
- }
- }
- interface Inter{
- int num=6;
- abstract void method();
- class inner{
- int x=1;
- }
- }
- class InterImp implements Inter{
- public void method(){
- System.out.println("x");
- }
- }
复制代码
-
静态类无法继承非静态类成员.png
(5.75 KB, 下载次数: 20)
作者: 余宏 时间: 2012-5-20 02:00
1.抽象类,静态类,接口和继承有什么区别,他们都各自实现了什么样的功能?用在什么地方?
抽象类
(1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法
(2) 抽象类不能被实例化
(3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类
(4) 具体派生类必须覆盖基类的抽象方法
(5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们
接 口
(1) 接口不能被实例化
(2) 接口只能包含方法声明
(3) 接口的成员包括方法、属性、索引器、事件
(4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员。如:
静态类 :被static修饰的类,不能被实例化。
2.在抽象类中可不可以定义静态类,静态方法,接口,以及静态类能否继承非静态类?
抽象类中可以定义静态类,静态方法,接口,静态类能继承非静态类
3.静态类中可不可以定义抽象类,接口?
不能,
4.接口中能否定义静态类?如果某个类中实现了某个接口,那么在这个类中那些方法需要被重新改写?
接口中能定义静态类,如果某个类中实现了某个接口,需要复写父类的抽象方法,
5.如果子类继承了一个抽象类,那子类中能否定义静态方法,子类中又需要覆盖父类的那些方法?
子类可以定义静态方法,子类需要复写父类的抽象方法,
作者: 李保成 时间: 2012-5-20 08:23
抽象类中可以存在非抽象成员或者类,抽象类中的抽象方法,只能有方法的申明,不能有具体的实现,抽象类不可以直接被实例化,它可以使用多态的形式,父类指向子类的应用。子类继承父类后,必须全部实现父类中的抽象方法,否则该子类也只能是抽象类.
接口是一种特殊的抽象类,接口中声明的所有方法都是抽象的。使用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.如果子类继承了一个抽象类,那子类中能否定义静态方法,子类中又需要覆盖父类的那些方法?
子类是否定义静态方法,跟继承没有任何关系,继承只是为了获取到父类中的某些成员,所以可以写。
只要涉及到说子类继承抽象类,那么子类就需要实现父类中的所有的抽象方法,否则子类会变成抽象类。
作者: 黄克帅 时间: 2012-5-20 12:46
1.抽象类,静态类,接口和继承有什么区别,他们都各自实现了什么样的功能?用在什么地方?
1 含有抽象方法的类 必须是抽象类,抽象类可以有自己的普通方法。接口是一个特殊的抽象类,所有方法都是抽象的。 他们的的抽象方法就是为了让子类去实现,且子类必须实现。 在java中 静态类是内部类的一种。继承是一个类 拥有另一个类的属性和方法的一种实现方式,java 不允许多继承,但可以通过实现多个接口的方式来达到多继承的目的,所以在实际开发中,能用接口就不要用继承。
2.在抽象类中可不可以定义静态类,静态方法,接口,以及静态类能否继承非静态类?
在抽象类中可以定义静态类 静态方法 接口。 静态类可以继承非静态类
3.静态类中可不可以定义抽象类,接口?
都可以
4.接口中能否定义静态类?如果某个类中实现了某个接口,那么在这个类中那些方法需要被重新改写?
接口中可以定义静态类 。 实现了接口 接口中所有方法都要被重写 如果是抽象类实现接口则需要其子类重写接口的方法
5.如果子类继承了一个抽象类,那子类中能否定义静态方法,子类中又需要覆盖父类的那些方法?
可以定义静态方法。只需要重写父类的抽象方法
作者: 王德超 时间: 2012-5-21 13:29
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>一般而言继承之后,子类就拥有父类的方法,但如果父类有方法是私有的,则即使继承也无法调用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |