java_子类和继承

本文探讨了Java中的子类和继承概念,包括单重继承、类层次结构、对象创建过程以及构造方法的使用。文章还介绍了super关键字、final和abstract特性,以及接口和多态性的重要性。同时,讲解了成员变量的隐藏、方法重写,以及异常处理的基本原则,最后提到了内部类和匿名类的应用场景。
摘要由CSDN通过智能技术生成

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, (默认)同包protectedpublic

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

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 学生 extendsclass 工人 extends 人
学生 a =  new 学生();
人 b = new();
人 c = a;
学生d = b//错误
工人 c = a//错误,没有继承关系
学生 cf= (学生) c;//c是从学生转换来的,所以可以强制类型转换
强制类型转换可以转换为别的子类对象吗?不可以,只能转换为原来的子类对象。

如果两个类是子类和父类的关系,那么子类可以自动地转换为父类,如果父类是这个子类转换而来地,那么可以通过强制类型转换为原子类对象。

classimplements 平面图形
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抛出的异常类对象类型一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值