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

接口中不能有私有成员,不能有实现方法,只有方法声明,
接口没有实例化,只能是
(接口) 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那样,你还有的选...

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java接口不能有实例变量,只能有常量。因为接口的变量默认是public static final类型的,也就是常量,它们的值在定义时就已经确定,不能被修改。 但是从Java 8开始,接口可以定义default方法和static方法。default方法是接口带有方法体的方法,它可以被实现类继承或覆盖。static方法是接口带有static关键字的方法,它可以直接通过接口名来调用,而不需要创建实例对象。 在Java 9接口还可以定义私有方法,这些方法只能在接口被调用,不能被实现类或其他类调用。 下面是一个Java 8带有default方法和static方法的接口的例子: ``` public interface Animal { int MAX_AGE = 100; void eat(); default void sleep() { System.out.println("动物睡觉"); } static void run() { System.out.println("动物奔跑"); } } public class Dog implements Animal { public void eat() { System.out.println("狗吃骨头"); } } public class Test { public static void main(String[] args) { System.out.println(Animal.MAX_AGE); // 100 Dog dog = new Dog(); dog.eat(); // 狗吃骨头 dog.sleep(); // 动物睡觉 Animal.run(); // 动物奔跑 } } ``` 在上面的例子,Animal接口定义了一个常量MAX_AGE和三个方法eat、sleep和run。eat方法必须被实现类实现,sleep方法有默认实现,而run方法是静态方法,可以直接通过接口名来调用。Dog类实现了Animal接口,并实现了eat方法。在测试类Test,通过Animal接口的常量MAX_AGE来获取狗的最大年龄,通过Dog类的实例对象dog来调用eat和sleep方法,通过Animal接口的静态方法run来调用动物奔跑方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值