从C++到java(三)

来源:互联网 发布:淘宝开店交保证金多少 编辑:程序博客网 时间:2024/04/29 18:50

第五章 继承与接口

子类与父类

父类具有一般属性,子类可继承其状态和行为,根据需要增加新的。

结构

class student extends people{

//student 继承 people的,如果不写extends及以后,则默认继承object类(java.lang里面的)

}

子类的继承性

1.在同一包中,继承父类非private的变量和方法,直接用 . 引用就行

2.不在同一包中,不能继承友好的变量和方法和private的

3.关于protected的进一步说明,如果other类中用D类建立了一个对象,要引用D的对象的protected。如果D的projected来自于父类A那么other和A就要在一个包里,如果D的projected就是D的,那么就要D和other在一个类里面。

子类的构造过程

子类的构造方法总会先调用父类的某个构造方法,也就是说,如果子类的构造方法没有明显指出构造父类哪个构造方法就会构造没有参数的那个。另外,调用父类的构造方法时会给子类不能继承的变量如private分配空间,表面上没用,浪费了内存,但是实际上子类继承的方法可能会用到

成员变量的隐藏和方法重写

1.如果子类和父类有相同的变量,那么父类的被隐藏,用子类的,但是我们可以用方法去使用父类的那个变量。

2.通过方法重写,可以隐藏继承的方法,那么新的方法就可以同时使用子类和继承父类的变量

3.注意

1.对于数据类型来说,类型名字参数必须都相同,只有名字和参数相同是不可通过编译的

2.但是如果方法类型是类的话,重写的方法的类型可以是其的子类。比如两个类Father和Son,可以两个方法father A()和Son A()

super关键字

1.子类不能继承父类的构造方法,所以我们只能在子类的构造方法中用super来引用 如父类的构造方法A(int a) 

子类Son  的构造方法是 B{   super(int a);}  就是用super代替父类名称

2.如果没有super那么java默认调用父类的没有参数的构造方法,因此千万不要忘了给父类一个没有参数构造方法,不然不能通过。

3.另外super还可以去通过加一个“ . ”去引用被子类隐藏的变量和方法。

4.关于内存,子类声明和继承的东西是属于子类内存,那些被他隐藏的不属于任何对象。

final关键字

如果用final修饰父类的一个方法,则这个方法不能被重写。

对象的上转型对象

1.如果我们把子类的对象的引用赋个父类的对象,此时父类的对象就变成上转型对象

2.他可以调用子类继承或者因此或者重写的变量和方法

3.当他调用时,就相当于子类去调用,因此不加说明还是调用重写的方法和变量

4.可以用强制转换把上转型重新变成子类。

继承与多态

不同子类的重写不一样,父类成为上转型时用的哪个方法要看父类是谁的上转型

abstract类和abstract方法

1.非abstract类不能有abstract方法

2.abstract表示只许声明,不许实现,不能用new创建。如果想用方法,要用重现的方式去实现,另外abstract是能被继承的。

3.我们可以用abstract去构建整个类大体轮廓。

4.可以用abstract和多态的性质去实现程序的“开-闭”原则,提高代码的可维护性。

接口

1.因为一个类只能有一个父类,这种单继承性使得java变得简单,但是我们可以用接口去实现“多继承”

2.接口的声明,interface 接口名字,如果前面加public就可以被其他包引用,不加就是友好类

3.接口体只有抽象方法,所有常量都是public和final,所有抽象方法都是public和abstract,在接口里面可以省略,在外面public就不能省略了

4.用implements去实现接口,可以有多个,用逗号隔开。用import也行的,因为包里面也有接口

5.实现接口的类,除了abstract类,必须重写接口的所有方法,并且声明为public不然会降低访问权限

6.对于接口的常量,可以用接口名或者类去调用。

7.如果父类有实现接口,那么子类也自然接受。接口也可以用extends去继承另一个接口。

8.接口的意义就在于增加许多类都需要具有的功能。

9.接口回调,了解就行,类似上转型。

10.接口与多态类似abstract与多态

11.接口与abstract的比较

abstract和接口都可以有abstract方法,接口只能有常量,abstract可以有非abstract方法。

使用abstract或者接口就看是否想要去实现继承和你想需要几个“来源”

第六章 内部类与异常类

1.内部类

1.在一个类中声明另一个类,这样的类是内部类。包含他的叫做外嵌类。注意声明类和声明对象的区别。

2.声明内部类就像声明外嵌类的成员。外嵌类可以用内部类去声明他的成员。

3.外嵌类的变量和方法可以被内部类使用。

4.内部类不能声明类方法和类变量。(static)

2.匿名类

1.匿名类是一个内部类也是子类。

2.常用来给函数传参。

3.匿名类创建对象时要用父类的构造方法。

4.具体代码看书,不看代码理解不了的。

5.与接口有关的匿名类,类似的。

3.异常类

1.这是优化代码的一种方法

2.各种异常类都是Exception的子类,他们之间不能有父子关系,否则写catch父类即可。

3.用try-catch去判断一条语句是否有问题

4.用关键字throw(不是throws)去增添新的异常类。具体看代码

4.断言

1.发生错误时立即停止

2.assert boolbeanException;//boolbeanException 是你要判断的东西,其值必须是Boolean

assert boolbeanException : message;//message加上之后会在前面值为FALSE时输出message

5.class类

他是java.lang里面的类,在创建对象时相应的Class类就会创建,可以用Class类去获取该对象的名字方法,名称,成员变量名称等

0 0