黑马程序员技术交流社区
标题:
接口和抽象类的思考, 积分来啦
[打印本页]
作者:
杨华东
时间:
2012-10-5 15:13
标题:
接口和抽象类的思考, 积分来啦
interface Demo1
{
void function1();
}
abstract class Demo2
{
abstract void funtion2();
}
public class Test5 {
/*
* 想问大家一个问题,希望大家超越自己。
* */
public static void main(String[] args)
{
/*
* 在主函数里无法直接创建接口和抽象类对象的原因,我有三个疑问:
* 1,接口和抽象类没有构造函数?
* 2,接口和抽象类的构造函数被私有化了?
* 3,两者被JVM制动识别了,是一种底层规则吗?
*
* 求详解。。。。。。。
*/
}
}
复制代码
作者:
姬仁贵
时间:
2012-10-5 15:40
接口和抽象类因为里面的方法都是抽象的所以是不能被实例化的,原因很简单,
抽象的方法没有具体的方法实体,所以实例化是没有意义的,但抽象方法和接口是有区别的:
抽象类和接口之间的区别:★★★★
共性:
它们都是不断抽取出来的抽象非概念
区别:
1、抽象类只能被单继承、接口可以被多实现,避免了单继承的局限性。
2、抽象类中可以定义抽象方法,和非抽象方法,它可以用于定义体系的基本共性的内容。接口
中只能定义抽象方法,它主要用于对象的功能的扩展。
3、抽象类是继承关系,是is a关系,接口是实现关系是like a关系。
4、抽象类中的成员修饰符都是自定义的,接口中的修饰符都是固定的。
作者:
张榆
时间:
2012-10-5 16:01
1.抽象类中还有非抽象方法,所以抽象类有默认的构造函数,而且如果父类中是带参数的构造函数,子类就必须写一个构造函数来调用父类的构造函数
abstract class Person { //定义一个抽象类,必须被继承
Person(int i) { }
}
public class Student extends Person {
Student() {
super(int i)://必须显示的调用父类构造方法//super代表父类对象
}
}
而接口仅仅是一种规范,不是用来实例化的,而且最主要是接口中的方法都是抽象的,如果有构造函数也是抽象的,而且构造函数不能被复写,那么这个构造函数存在有什么意义?
2.如第一题的解答,抽象类的构造函数并没有被私有。
3.只有接口才是一种规则,抽象类它仍然还是一种类。
作者:
佘天宇
时间:
2012-10-5 16:17
抽象类和抽象方法都要用abstract进行修饰
抽象类不能被实例化
抽象类中不一定有抽象方法,但是,有抽象方法的类一定是抽象类。
抽象类的使用。通过子类对象来使用方法。
抽象类有构造方法。
抽象类中的构造方法供子类实例化调用。
接口是对外暴露的规则
是程序的扩展功能
接口和抽象类的区别
抽象类只能被单继承
接口可以多实现
接口的出现避免了多继承的局限性。
抽象类中的数据特点:
成员变量:可以是变量,也可以是常量
成员方法:可以是抽象方法,也可以是非抽象方法
构造方法:有构造方法
接口中的数据特点:
成员变量:是常量。都有默认修饰 public static final
成员方法:都是抽象方法。都有默认修饰 public abstract
抽象类中定义的是体系中的共性功能。
接口中定义的是体系中的扩展功能。
接口是没有构造方法的,接口的可以多实现,如果有构造方法给子类使用,很显然不合理
作者:
孙含庆
时间:
2012-10-5 16:40
本帖最后由 孙含庆 于 2012-10-5 16:45 编辑
/** 接口不可以有构造函数,因为他不能被继承。用于扩展功能用得,实现他的类必须实现他得全部方法,因为他的方法都是抽象的。
* 抽象类可以有构造函数,据说抽象类的子类就是调用抽象类的构造方法来创建自己的对象的。
* 他可以有抽象的和非抽象的方法,抽象的方法没有方法体,非抽象的方法有方法体。继承他的类,
* 必须实现他所有的抽象方法,不然这个类就也是抽象的。
* 接口和抽象的定义规则都是死的,必须这么写,JVM 才可以识别,不给你报一大堆错误,是底层规则。
*/
初期学习阶段,没有必要非去研究java 底层原理什么的,先按着规则来学习,不要去钻牛角尖,会学得很费劲。
等全部学完,会使用了,也就慢慢都懂了。
interface Demo1
{
//Demo1(){};
接口不可以有构造方法,可以理解成是很特殊的抽象类。 他不能被继承,所以没有构造方法。
public static final int PI = 3;
//接口中的定义是死的,固定修饰符,变量必须是静态常量。
public abstract void function1();
// 法必须是抽象,就是不写修饰符,java虚拟机也会给你补上
}
abstract class Demo2
{
Demo2(){};
//抽象类有自己的构造函数,但是不可以new 创建对象,因为调用抽象方法无意义。
abstract void function2();
//类中有抽象的方法,类也必须是抽象的。
public String print(){
//抽象类可以有非抽象的,有实现体的方法。
return "hello java";
}
}
public class Test5 extends Demo2 implements Demo1 {
public static void main(String[] args)
{
}
public void function1(){
//接口被实现,子类必须实现接口的所有方法。
}
public void function2(){
//抽象类被继承,子类必须复写其中的所有抽象方法
}
}
作者:
杨华东
时间:
2012-10-5 19:32
问题已解决
作者:
杨华东
时间:
2012-10-5 19:36
孙含庆 发表于 2012-10-5 16:40
/** 接口不可以有构造函数,因为他不能被继承。用于扩展功能用得,实现他的类必须实现他得全部方 ...
一个小问题 。 你说 抽象方法有构造函数,但是不可以new对象。你的理由是:调用抽象的函数无意义。
但是我不一定非要调用抽象的函数,哥们可以调用非抽象的函数啊?????这时候还有意义吗??
有点牛角尖了 嘿嘿嘿 求解释。。。。。
作者:
李志群
时间:
2012-10-5 22:41
4、接口和抽象类的区别--------都是不断向上抽取出来的
A:抽象类只能单继承,接口可以多实现。
B:抽象类中可以由非抽象方法。抽象类中可以定义变量和常量。接口中的方法都是抽象的。接口中只能有静态常量。因为接口中的方法都有默认修饰符:public abstract;接口中的成员变量都有默认修饰符:public static final
C:抽象类中定义的是一个体系的共性功能。接口中通常定义的对象中的扩展功能。
D:接口的出现避免了单继承的局限性。
E:抽象类被继承表示的是:is a 的关系。叫做:xx是yy的一种。 接口被实现表示的是:like a 的关系。叫做:xx像yy一种。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2