1、为什么会出现子类(sub class),父类(super class)的概念?他们出现解决了什么问题?
2、如何定义一个类的字类?定义的格式是什么?
extends:关键字,用来定义子类。
//c++ 用冒号
class 子类名 extends 父类名 {
父类基础上,子类特有东西
}
父类必须提前存在
3、什么是单重继承? 直接父类只能有一个,间接父类可以有很多个。
4、java所有类有什么性质? 所有类形成一个倒立树状层次结构,因为java只允许单重继承,这就一个类至多只有一个父类,可以有多个子类,符合树的一对多的性质,所以形成了树状结构。
5、所有类都有父类吗或者间接父类吗? 是的,树根是object类(java.lang.object
),即object类是所有类的祖先类,因此除了object类,每个类仅有一个直接父类。
6、什么时候这个类被认为是object类的子类? 如果类的声明中没有使用extends
关键字 ,那么就被认为是object的(直接子类)子类
7、创建子类对象的时候,是首先为子类对象内特有的成员变量分配内存吗? 不是的,首先为父类的(回溯到object类)成员变量分配内存,然后依次下来分配内存。
8、子类的构造方法有什么要求? 子类构造方法的第一句首先要调用父类的相应构造方法,并且不能直呼其名,要用super
;这同时也可以用7的原因来解释,因为首先要为父类的成员变量分配内存,然后才为子类的成员变量分配内存,所以要先调用父类的构造方法,再为子类分配内存。
class Person {
int n;
Person (int n) {
身份证号n;
}
}
class Student extends Person {
int m;
Student (int n, int m) {
super (n);
学号m;
}
}
9、instanceof
运算符是什么?用来解决什么问题? instanceof
是双目运算符,用来判断左边的对象是不是右边类的对象。
格式 x instanceof T 值:true,| false
左边的x,对象,右边T是类,表示左边x是右边T的对象吗?如果是,则返回true,否则false
子类的继承性
1、父类的成员变量和方法一定可以再子类使用吗? 因为要遵守访问规则,所以父类的成员变量方法不一定每一个都可以再子类中使用。 (1)那么在创建对象的时候还需要为父类这些成员变量分配内存吗? 要的,但是子类中不可以调用这些成员变量
2、什么叫继承? 如果父类的某个成员变量在子类中可以调用,那么说明这个成员变量被继承了。
pacakage S;
public class A{
public int 学号; //private int 学号;
}
Pacakage T;
class B extends S.A(如果不是一个包内,那么就需要写全称或者import S.A) {
B k = new B();
k.学号 = 32;//如果父类学号是public的,那么是合法的,如果父类学号是private的,那么是非法的。
}
3、封装性和继承性相关吗? 相关,如果追求封装性,那么会影响继承性,追求继承性,就会影响封装性。因为封装性会影响其他类对他的继承,继承性又会使得用户可能能够使用里面的类。因此protected
也就应运而生。
4、protected
有什么作用? 如果成员变量或者方法的访问控制符是protected
,则在同一个包的其它类中有效,还在不同包的子类中有效。意味着如果在同一个包内,那么这个包内的所有类都能使用这个受保护的成员变量或者方法,如果在不同的包中,那么只有子类能够使用。
5、按照访问权限由强到弱进行排列? private
, (默认)同包
、 protected
、public
成员变量的隐藏和方法重写
1、用来解决什么问题? 在继承时, 原则上我们无法改变父类的东西,但是有时候 我们想要改动。这就引出了成员变量隐藏和方法重写的概念。
2、如何对隐藏父类的成员变量? 在子类中可以声明与父类同名的成员变量,那么这个子类的成员变量会覆盖父类的成员变量。那么这个时候我们调用这个成员变量的时候,调用的是谁的? 是子类自己声明的成员变量。
3、如果隐藏了父类的成员变量,我们是不是就不可以再调用父类的成员变量了? 不是的,我们可以用
super.成员变量
来特别调用父类的成员变量
class Person {
int 身份证号;
}
class Student extends Person {
long 身份证号;//父类的int无法存下身份证号
int 学号;
void show 身份证号() {
System.out.println ("我的身份证号" + 身份证号);
System.out.println ("父类的身份证号" + super.身份证号);
}
}
3、 方法重写是什么? 是指子类中定义一个方法,跟父类的方法名字、形式参数个数,参数类型和父类的方法完全相同,而且返回类型和父类一样。不允许降低访问权限。可以提升吗?
4、重写和重载一样吗? 不一样,法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数
5、子类调用的方法是谁的? 子类重写的方法。如何调用父类的方法?用super.方法名称
6、子类重写继承的方法对访问权限有什么要求? 不允许降低访问权限,如果父类的访问权限是protected,那么只能说public, protected
super关键字
1、子类不继承父类的构造方法,因此需要super要调用父类的构造方法
2、用super调用被重写或隐藏的方法或成员变量
final关键字
1、final有什么作用? final修饰的类不能有子类,即不能被继承。
final class A {
...
}
2、如果用final修饰父类的一个方法,那么这个方法不允许被重写。(对于隐藏呢?不影响隐藏的操作,i因为隐藏并没有改变成员变量的内容);
class A {
final void show () {
...
}
}
3、如果某个变量被final修饰,那么这个变量就成为了常量,在程序运行过程中,这个量的内容不允许改变。即对任何企图改变这个量的操作都会报错
class A {
final long 身份证号;//程序运行期间,身份证号不允许改变。
final int x = 4;
}
abstract类和abstract方法
1、用来解决什么问题?
abstract class A {
}
abstract class 平面图形 {
static final double PI = 3.14159;
abstract double 求面积();
abstract double 求周长();
}
class 正方形 extends 平面图形 {
double 边长;
double
}
2、抽象方法可以有定义吗? 不可以。只能声明。因此不能用来创建对象。
abstract int min (int x, int y);
3、什么是抽象类? 有抽象方法的类叫抽象类
4、继承抽象的类有什么要求?如果不要求继承类为抽象类,需要重写抽象类的方法,否则 继承类为抽象类。需要加上abstract吗? 重写方法不是抽象方法,需要有定义,所以不需要absract,这样才能定义该方法
接口
1、为什么要引入接口?为了克服单重继承的缺点,一个类只能有一个父类。
interface 接口名
{
公有静态常量的定义:public static final
公有抽象方法的声明 public abstract
为什么叫声明?因为没有定义。
公有静态常量需要赋初值吗?需要。因为是常量
}
文件名 .java
编译得到的文件.class
class A implements 接口名 {
接口公有抽象方法实现
}
2、什么是接口?接口不是类,
3、如何实现接口?一个类可以通过关键字implements
声明自己实现一个
类型转换多态性
1、子类->父类叫做自动类型转换
2、什么情况下可以进行类型转换?两种类型之间必须有继承或实现关系。
3、父类对象不能自动地转换为子类对象,一定不可以转吗?不是的,有的时候可以转换,叫做强制类型转换,为什么要进行强制类型转换?如果父类对象是某个子类对象转换而来的,那么就可以把这个转换过去。
4、多态性用来解决什么问题?什么是多态性?
class 学生 extends 人
class 工人 extends 人
学生 a = new 学生();
人 b = new 人();
人 c = a;
学生d = b//错误
工人 c = a//错误,没有继承关系
学生 cf= (学生) c;//c是从学生转换来的,所以可以强制类型转换
强制类型转换可以转换为别的子类对象吗?不可以,只能转换为原来的子类对象。
如果两个类是子类和父类的关系,那么子类可以自动地转换为父类,如果父类是这个子类转换而来地,那么可以通过强制类型转换为原子类对象。
class 圆 implements 平面图形
class 正方形 implements 平面图形
5、父类地引用可以调用子类对象的新增成员变量和方法吗?不可以,可以调用子类的重写方法吗?可以,因为重写的方法不是新增的,是在原有基础上修改的。
7、为什么会出现多态?对象多态是什么?一个对象的引用可以引用不同类型的对象叫对象的多态。
方法多态是什么?一个方法引用不同类型的的方法叫做
class A {
void spead();}
class
8、什么叫做多态编程?利用多态的不确定性来编程。
9、接口和继承的差别?我们可以通过implements 得到多个接口, 继承只能继承一个对象,所以接口更加灵活。
10、一个引用型变量只能代表与其类型相符的对象
这里仅仅通过一句话不知道调用哪个对象
11、多态分为几类?一个对象的引用可以引用不同类型的对象叫做对象的多态。一个方法的调用语句可以调用多个不同的方法叫做方法调用的多态
interface 平面图形
{
public static final PI = 3.14
public abstract double 面积();
}
class 正方形 implements 平面图形 {
double 边长;
double 面积() {
return 边长*边长;
}
....
}
class Test {
public static void main (String [] args) {
平面图形[] a = new 平面图形[4];
}
}
内部类
为什么会出现内部类?
1、什么是内部类?java支持子啊一个类中声明另一个类,这样的类叫做内部类
class AA {
class B {
}
}
生成AA.class, AA$B.class
2、定义了内部类会生成几个文件?定义了多少个类就会生成多少个class文件
3、既然接口不是类,那么接口会生成文件吗?会生成文件,后缀`.class`
匿名类
1、子类的对象一定要有名字吗?不一定,java允许直接使用父类的构造方法和子类的类体创建一个子类对象,而不需要声明子类的名字
2、为什么会出现匿名类?因为有时候只需要使用很一次,那么为了提高效率我们可以用匿名类。
class 宣传 {
void 喊口号() {
}
}
宣传 a = new 宣传() {
void 喊口号//重写
{
}
}
3、接口有匿名类吗?如何定义呢?java允许使用接口和类体来定义一个类,而不需要使用子类的名字
interface 算术
{
}
算术 a = new 算术() {
}
异常类与异常的处理
为什么会出现这个?用来警示程序员。
1、什么是异常?那么曾经顺利运行的程序,再次运行时也可能会出现意外的情况
2、一个程序第一次运行没有错误,那么后面一定不会i出现错误码?不一定,一个程序需要外部条件,当外部条件发生变化时,我们的程序可能会出现错误
3、异常是错误吗?不是,我们并没有写错程序,
4、异常可以不处理吗?不可以,良好的程序应该尽量预见各种可能出现的异常情况,最好还能提供异常处理的预案。良好的计算机语言应该具备异常处理的机制。
异常的关键字是什么?如何抛出异常?如何处理异常?异常分为几类?
5、异常类的层次结构?
java.lang.object
java.lang.Throwable
Error Exception
java 语言要求程序至少能够遇见到除Errow 和RuntimeException之外的任何异常
6、java提供了什么语句? try\finnaly\catch\语句块
try 语句块
将可能出现异常的语句包上try语句块
catch (所要处理的异常类1 x)
{
处理异常语句
}
catch (索要处理的异常类2 y)
{
处理异常类对象
}
7、当java虚拟机遇到try的时候会降低速度,采取一些检测机制。所以有try语句块的程序,运行雄安率会受到影响。
8、如果出现了问题会发生什么?程序将不再向下运行,会抛出异常。当程序运行到trye语句块,会小心运行。如果出现了异常,会生成一个异常类对象,并将其抛出try语句块,语句块剩余的语句将被抛弃。
9、catch
能同时处理多个语句吗?不能,一次只能处理一个异常类,当遇到和他匹配的时候就会进入相应的catch,类似于switch中的case中。
10、catch
应该放在什么位置?一般放在try语句块之后来捕获try中抛出的异常的对象。catch
形式参数类型有什么要求?需要和try
抛出的异常类对象类型一致。