您的位置:澳门新葡萄京娱乐网站 > 编程知识 > 面向对象偶尔会迷惑的知识点【澳门新葡萄京娱

面向对象偶尔会迷惑的知识点【澳门新葡萄京娱

2019-12-22 01:32
interface frist{ public function ex1();}interface seconds{ public function ex2();}interface third extends frist,seconds{ public function ex3();}class fourth implements third{ public function ex1(){} public function ex2(){} public function ex3(){}}class fourth implements frist,seconds{ public function ex1(){} public function ex2 接口类的方法权限都是public,默认public引用接口的类必须实现接口的所有方法,否则会报错,比如:"Class e contains 1 abstract method and must therefore be declared abstract or implement the remaining methods",即:e类包含1个抽象方法,因此必须声明抽象或实现其余方法。4、抽象类:只要一个类里面有一个方法是抽象方法,那么这个类就要定义为抽象类抽象类继承抽象类不能重写父类方法。抽象类继承是对父类的方法的拓展。继承的派生类当中要把所有抽象方法重载才能实例化。抽象类实现的普通发放,可以在非抽象子类中直接调用。5、接口和抽象类的异同点对接口的使用方式是通过关键字implements来实现的,而对于抽象类的操作是使用类继承的关键字exotends实现的 接口没有数据成员,但是抽象类有数据成员,抽象类可以实现数据的封装。 接口没有构造函数,抽象类可以有构造函数。接口中的方法都是public类型,而抽象类中的方法可以使用private、protected或public来修饰。 一个类可以同时实现多个接口,但是只能实现一个抽象类。 相同点:函数体内不能写任何东西,比如:function getName();即可。

overload

重载,指在一个类内实现若干重名的方法,名称相同而参数形式不同:

在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数形式可以是不同的参数类型,不同的参数个数,不同的参数类型顺序;

不能通过访问权限、返回类型、抛出的异常进行重载;

方法的异常类型和数目不会对重载造成影响;

子类可重写父类public或者protected的方法,不能重新private的方法,如果同名只是在本类重新声明

抽象类

抽象类不能被实例化,实例化的工作是交由它的子类来完成,它只需要有一个引用即可。
子类中的抽象方法不能与父类的抽象方法同名。

2、继承权限问题

类是默认访问权限

如果类A是抽象类B的子类,处于不同包中,且类A是友好访问权限,如果在类A所在包中,可以是使用B b=new A();和类A中的方法;否则不可以用,因为这时不能在包外使用类A;但是如果还有抽象类B的子类类C和类A处于同一包中,则可以通过类C间接使用类A。

父类private方法不可被继承,父类私有化

关于默认访问权限

默认访问权限,也称友好访问权限 没显示指定为哪种访问权限( public、protected、private )。如果要访问默认权限修饰的类成员,只能与此类在同一个package中, 即使其子类也必须满足此条件。

3、接口类继承

接口

接口所有方法访问权限自动被声明为public。确切的说只能为public,如果声明为protected、private,编译会出错!

接口中可以定义“成员变量”,或者说是不可变的常量,因为接口中的“成员变量”会自动变为为public static final。可以通过类命名直接访问:ImplementClass.name。

接口中不存在实现的方法。

实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。

不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须指向一个实现该接口的类的对象。可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。

在实现多接口的时候一定要避免方法名的重复。

父类protected方法可以被继承,但不能被实例化对象调用,如果调用会出现" Call to protected method frist::printer()"的报错,父类对此方法置于保护模式下

类成员是默认访问权限

当子类和父类在同一个包中时,子类继承父类中不是private的成员。

但是,当子类和父类不在同一个包中,父类中的private和友好访问权限的成员不会被子类继承,也就是说,此时子类只继承父类中的public和protected访问权限的成员变量作为子类自己的成员变量;同样的,子类也只继承父类中的public和protected访问权限的方法作为子类自己的方法。

在类B中用类A创建了一个对象,若类A和类B在同一包中,那么该对象是可以访问类A的友好变量和友好方法,也可以访问类变量和类方法(用类名访问)。不同包使用类A时,不能访问类A的友好变量和友好方法。

class frist{ public function __construct(){ echo "我是第一个类。","
"; } public function printer(){ echo "frist","
"; }}class seconds extends frist{}class third extends seconds{}$obj = new third;

关于重写和重载

这两个词曾经经常混混搅,如果不记中文词只记住外语词会清楚更多。

父类public方法可以被继承、可以被实例化对象调用,属于公开方法

关于构造器:

不能被static、final、synchronized、abstract和native修饰。
接口可以引用,但不允许被实例化,所以接口中没有构造方法。

父类的构造方法不能被子类继承,也不能被复写,因为子类在实例化对象时,需要先调用父类的构造方法:因为他继承父类的成员使用,使用前这些成员必须初始化,而他们是父类的成员,所以,必须通过父类进行初始化。如果子类的构造器没有显式的调用超类的构造器方法,会自动调用父类无参构方法,如果父类没有不带参数的构造方法,且子类的构造方法中又没显示的调用超类其他构造方法,则Java编译器将报告错误,那么就要你自己在子类的构造方法中,通过super(括号内为参数)的方式调用父类的构造方法,并需将其放在子类构造方法的第一行。

自定义类中,如果不写构造方法,java系统会默认添加一个无参的构造方法。如果写了一个有参的构造方法,如果想使用无参的构造方法,就必须手动给出无参构造方法。所以我们自定义的类时通常都会手动给出无参构造方法。

1、PHP类不支持多继承,也就是子类只能继承一个父类,但是支持多层次继承

关于多态

一个有趣但不严谨的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法。

多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)。

实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

多态的作用:消除类型之间的耦合关系。

现实中多态的例子:比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

多态三个必要条件:有继承;有重写;父类引用指向子类对象,即向上转型。

Java中多态的实现方式:接口的实现,继承父类进行方法重写,同一个类中进行方法重载

结果:这是第一个类。 frist 第二个类和第三个类没有重写printer()方法,第三个类实例化后可以调用printer()方法。

关于抽象

抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

我们要先知道子类才能抽象出父类,而接口不需要知道子类的存在就可以定义一个规则,抽象类往往都是通过重构而来的!所以说抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。

接口支持多继承,接口类的方法不需要实现比如:

override

重写(覆盖),指子类在继承父类时,重写(重新实现)父类中的方法:

重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.

重写方法的访问修饰符不能小于被重写方法的访问修饰符(public>protected>default>private)

重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;

需要被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。

静态方法不能被重写为非静态的方法(会编译出错)。

本文由澳门新葡萄京娱乐网站发布于编程知识,转载请注明出处:面向对象偶尔会迷惑的知识点【澳门新葡萄京娱

关键词: