java接口中能申明私有成员么?接口能不能实例化?

java接口和抽象类的区别 收藏 简单来说, 接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法。 一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。 还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.

1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface. 2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。 3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。 4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。 5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。 6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。 7.接口中的方法默认都是 public,abstract 类型的。

 
 
接口中不能有私有成员,不能有实现方法,只有方法声明,
接口没有实例化,只能是
(接口) ITest test = new Test();实际上还是实例化了接口的实现类

抽象类中可以有私有成员,可以有实现方法 

他自己都能实例化了还要断承和实现类做啥(哈哈,这是俗一点的说法)

有时间在网上看看接口和抽象类的区别
================================================
 
 
接口可以实例化

一般对象比如有个具体的类Person已定义好,要实例化它, 采取的语法是  Person objPerson = new Person();

但接口(如IConnection)不能这么做,其不能直接New 自己,如 IConnection objIConnection = new IConnection(),

这就是说"照例不可以生成接口的对象"的含义.

但面向对象都具有多态,可以向上转型, 比如某个类实现了该接口,如类Connection实现了该接口,则Connection类的

实例化对象可以给IConnection接口. 如 IConnection objIConnection = new Connection()

然后编程都基于接口进行操作,这样脱离了具体的类的实现,在某些场合就更灵活和易于扩充.

把变的东西抽象出来了,成了接口,反倒就让代码相对固定了,能适应变化的情况.

接口不能实列化,但是可能通过某些类创建接口的对类

==================================================

接口不能“直接”实例化。--msdn  //没说不能“间接” “间接”实例化接口    接口 实例 = new 实现接口的类() 长见识 

===================================================

类-抽象类-接口总结   近期通过对Java一些基础知识的学习,我熟悉了类抽象类以及接口这三个概念,先将其区别与联系总结如下! 1 三者最大的[color=indigo]区别在[u][/u]于类具有构造器从而可以来构造对象!而抽象类与接口中的方法都是未完全实现,他们都是一种抽象模型,不具备构造对象的能力!但是可以通过实现(implements)接口和继承(extends)抽象类来创建类从而来构造对象! 2在定义上:类的定义模式是public+class+类名[b];抽象类的定义public+abstract+clas+类名;接口的定义格式public+interface+类名 3在方法上类的方法必须有实现而抽象类的方法可以根据需要部分实现;而接口中的方法只能有其定义没有具体的实现,就是说接口中的方法都是抽象的方法!抽象类中可以有非抽象方法。接口中则不能有实现方法 4抽象类和接口在继承和实现时子类对父类中未实现的方法必须实现可对其进行重写! 5接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变!

=============================================================

抽象类,通过继承它实现多态,后期绑定,可以为将来要实现的东西做好接口,实现重用性。

 

InterfaceA IA = new InterfaceA();

编译器报错:Cannot instantiate the type TA 指明接口只能被声明,不能被实例化。

 

 

简单工厂设计模式

设定一个Class名称是AClass,在面向对象编程中,一般一个Class都会继承一个接口,设定AClass的接口为AInterface,那么生成AClass的对象方法如下:

 

                                    AInterface  a = new AClass();

改写成下列方式: AInterface  a = Afactory.create();    //代码2

Afactory的create方法封装了具体创建细节。解耦了创建过程和使用过程,系统可扩展性增强,稳定性增强。 Afactory的create方法代码:     public static AInterface create(){          ……         return new AClass();    }

上面代码2这一行是使用Afactory的create方法来生成AInterface实例。

 

 

由于是初学者,之前一直对上面这句很困惑,前几天看到一个用抽象类实现接口的案例,为什么不直接用抽象类的实例的方法?

 

网上的解答:

 

接口是强制性的,它的所有方法都要实现。

但是抽象类不是,比如说一个接口,你只用到其中的一两个方法,可是如果直接实现接口需要实现里面的五个方法,这时候你可以先让抽象类实现接口,然后你的类继承接口,就不需要都实现接口的方法了而且接口的抽象层次要更高,是一种契约,抽象类是提供了很多的方法,给你用,没有强制性。

 

抽象类和接口比起来,有一个好处,就是某些函数可以实现具体的方法,而并不一定是声明抽象的方法,而接口只能声明抽象方法,所以用一个抽象类来实现某个接口可以实现一些通用的方法,而这些具体实现的方法里还可以调用抽象方法,所以减少了子类中的重复代码

 

=======================================================

我也谈谈抽象类和接口的理解,它们最根本的区别是:
  • 抽象类的子类是继承,而接口的子类是实现.唯一性的继承让子类有其父类除私有外的一切责任和义务,意味着更与父类有更紧密的耦合;接口则不是唯一的,可根据需要实现或不实现,这种可选择性意味着松耦合和灵活.
所以,如果是极少变动的,或者说内置的特征,我们用抽象类,比如性别,一旦出生,性别就固定,那继承自male类即使高耦合也没什么影响.但你从事什么职业,却是很可能变动的,你今天可能是程序员,明年则可能干起了个体户,那implement一个programmer接口更合适.其实你也许已经注意到,一旦你继承male类,你就和male紧密的耦合了,因为你一辈子都生不了孩子,而不像programmer那样,你还有的选...

强烈推荐"敏捷软件开发-原则模式和实践"这本书,对提高编码质量,或将思维从实现提升设计层面,都很有帮助.

==============================================================  

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值