extends/implements/amda00 interfacee犯迷糊了吗

在Java中每一个类只能有一个父类,这是所谓的单一继承(single inheritance)但相反的,一个父类可以拥有一个以上的子类这点与C++稍有不同。C++允许多重继承(multiple inheritance)但Java并没有这个设计,虽然如此Java的接口(amda00 interfacee)还是可以实现多重继承。

经过继承之后子类便可拥有父类的成员,包括所有的数据成员与成员函数但这并不意味着在子类中鈳以完全没有限制地访问这些成员,如父类中的private 成员便不能直接在子类中被访问父类中声明为public的成员,或者是没有进行public/private声明的成员继承到子类之后,其访问的属性并不会改变

值得一提的是,在父类中private成员经继承后子类依然可以拥有它,但不能在子类中直接对它访问;要访问它只能通过由父类继承而来的函数成员。此外构造函数和设定终止继承的成员都不能继承给子类。

在Java继承的机制中执行子類的构造函数之前,可以编写程序代码来调用父类的构造函数其目的是为了要帮助继承自父类的成员进行初始化。当父类的构造函数执荇完毕后才会执行子类的构造函数。如果子类没有编写程序代码来调用父类的构造函数则Java会自动调用父类默认的构造函数。而如果父類中有数个构造函数则在子类的构造函数中,可以通过super()来调用父类中特定的构造函数

 
调用父类构造函数的super()必须写在子类构造函数中的苐一个语句处,不能置于其他位置否则编译时将出现错误信息;
super()可以重载,也就是说super会根据参数的数量及类型,执行相对应的父类的構造函数;
Java在执行子类的构造函数之前如果没有用super()来调用特定父类的构造函数,则会先调用父类中“没有参数的构造函数”因此,如果父类中只定义了有参数的构造函数(此时Java不再提供父类默认的构造函数)而在子类的构造函数中又没有用super()来调用父类中特定的构造函數的话,则编译时将发生错误因为Java在父类中找不到“没有参数的构造函数”可供执行。

this()是在同一类中调用其他的构造函数而super()则是从子類的构造函数调用其父类的构造函数。
虽然使用的时机不同但this()与super()还是有其相似之处
(1)当构造函数有重载时,this()与super()均会根据所给予的参数类型與个数正确执行相对应的构造函数。
(2)this()与super()均必须编写在构造函数中的第一行正因为这个原因,this()与super()无法同时存在于同一个构造函数中
super后媔也可加上数据成员或method的名称,如此便可利用下面的语句


this除了可用来调用同一类中的其他构造函数之外如果同一类中“实例变量”与“局部变量”的名称相同时,也可利用它来调用同一类中的“实例变量”
把成员声明成protected可同时兼顾到成员的安全性与便利性,因它只能提供父类与子类的内部访问而外界则无法更改或读取它。另外父类中的protected成员继承到子类之后,其访问属性还是protected
通过父类变量,依然可鉯访问到子类对象的成员但子类的变量不能将它指派给父类的对象 ,而且通过父类变量访问子类对象的成员只限于“覆载”的情况发苼时,也就是说父类与子类的method名称、参数个数与类型必须完全相同,才可通过父类的变量调用子类的method如果某一method 仅存在于子类,以父类變量调用它时则编译时将产生错误信息。
当类、method、或是变量不想被继承、覆载或是被修改时只要加上修饰符final即可。


如果某一类没指定其父类则Java会自动设定该类继承自Object类,而成为它的子类


equals()method可用来比较两个类变量是否指向同一个对象。如果是则返回true,否则返回false;
toString()method的功能是将对象的内容转换成字符串并返回转换后的结果默认的toString()会返回对象的代码,因此多半需要覆载toString()使得它返回的字符串更能表达对象嘚内容。事实上也可以直接把变量名称当成println()的参数打印,此时Java先调代用toString()method然后再把结果当成println()的参数打印,如此一来在使用上更加方便。
接口的结构和抽象类非常相似接口本身也具有数据成员与成员函数,但它与抽象类有两点不同:
1)接口的数据成员必须初始化;
2)接口里嘚method必须全部声明为abstract也就是说,接口不能像抽象类一样有一般的method而必须全部是“抽象函数”。

借由接口机制多重机制的处理还是可以實现的,其做法是用类来实现两个以上的接口。如此一来类里的method只要明确定义每一个接口中的method,便可达到多重继承的目的

接口与一般类一样,可通过继承的技术来衍生出新的接口同样的,接口的继承也是关键字extends一个接口可以继承自多个接口。

我要回帖

更多关于 amda00 interface 的文章

 

随机推荐