java复习-继承

继承:仅需要指出子类与超类的不同之处,所以应该把通用的方法放在超类中,将具有特殊用途的方法放在子类中,可以实现代码复用

 

子类的方法是不能够直接访问超类的私有部分的(除了使用protected),一般使用类名调用方法,或者使用super调用超类的私有域(super和this不一样,它不是一个引用),super也可以传进参数,用来调用超类的构造函数,在使用这个方法时,super语句必须放在第一条语句的位置

当子类没有显示调用super时,将默认地调用超类的无参构造函数,如果子类和父类都没有定义无参的构造函数,那么是会报错的

 

当一个对象变量可以指示多种实际类型的现象被称为多态,它表明子类的每个对象也都是超类的对象,超类和子类的转换也符合强制类型转换的规则;在运行时能够自动地选择调用哪个方法的现象被称为动态绑定,比如子类覆盖了超类的某一个具有相同签名的方法或者构造方法,系统会从底部开始调用,相反地,当超类的方法使用了final、private、static时,系统会准确地调用超类的这些方法,这称为静态绑定

 

子类的重写方法的可见性不能低于超类的这个方法的可见性,当超类的某个方法为public时,子类必须为public

 

使用final修饰的方法不能被重写

 

在使用强制转换类型之前,最好使用instanceof关键字进行判断

 

抽象类的适用场景:某个类只是想成为其他类的派生类,而不想作为用来使用的特定的实例类

抽象类可以包含具体的数据和具体的方法,一般这些就是通用的数据和方法,免得子类再写一次;需要注意的是,抽象类即时没有定义抽象方法,也可以声明为抽象类,意义就是用来当作通用类;另外,定义一个抽象类的对象变量时,它只能用来引用非抽象子类的对象

 

Protected修饰的成员,它可以被子类使用,但有一个不好的地方,它也可以被本包的其他类使用

 

散列码,hash code,可以使用对象的.hashCode()获得,它的值是对象的储存地址

 

ArrayList与数组的区别:不必指出数组的大小;使用add添加元素;使用size不是length;使用get()不是下标

ArrayList中不许有基本类型,所以有包装器(wrapper),每个基本类型都有一个对应的包装器;基本类型转化为包装器是使用包装器的.valueOf()方法,系统会自动装箱,而强制类型转化使用.parse+包装器对应的基本类型(不对应类型的基本类型),当将包装器对象赋值给一个基本类型时,系统会自动地拆箱

 

在方法的传入参数中,如果在类型的后面接上 表明可以接收数量任意的该类型参数,与该类型的数组有类似的效果

 

反射:

使用反射,在设计或运行中添加新的类时,能够快速地应用开发工具动态地查询新添加的类的能力;能够分析类的能力的程序称为反射

当程序主动地使用某个类时,系统会通过加载、连接、初始化三个步骤进行初始化

其中,加载指的是将类的class文件读入内存,并为之创建一个Class对象

连接指的是将类的二进制数据合并到JRE中

初始化主要是对静态属性进行初始化

许多对象在运行时都会出现2种类型:编译时类型、运行时类型,比如多态的情况,超类变量指的是编译类型,而new 后的子类是运行时类型,反射就是为获得对象的运行时类型设置的

 

在java中,获得Class对象有3种方法:

1.     存在字符串类名时,使用Class.forName()

2.     知道对象时,使用对象.class代表

3.     知道对象时,使用对象的getClass()获得

 

获得对象的详细信息:

构造器:

getConstructor(使用包装器加.class指定具体的构造方法)

getConstructors()返回所有的构造方法,组成一个数组

getDeclaredConstructor/getDeclaredConstructors去除权限限制

方法:

  getMethod(方法名字,使用包装器加.class指定的具体的方法)

  getMethods/getDeclaredMethod/getDeclaredMethods类似上面的例子

属性:

  getField(指定的属性)

 getFields()/getDeclaredField/getDeclaredFields类似上面的例子

其他的包括对象类的注释、内部类、修饰符、包名等等等等

 

除了可以通过对象获得对应的Class对象,也可以使用Class对象的构造方法创建对象

2种方法:使用默认的Class对象的newInstance()方法,前提是对象类有默认的构造器,也就是无参构造函数;使用具体的Class对象的Constructor对象,在使用Constructor对象的newInstance()创建对象

 

使用泛型和反射结合,Class<Type>,和Type.class是一样的

 

枚举:

一个java源文件中,最多只能定义一个public访问权限的枚举类,且该java源文件也必须和该枚举类的类名相同

使用枚举类是继承自Enum类,不是Object

枚举类的构造器只能使用private修饰

枚举类中的变量都是对象实例,默认使用public static final修饰

使用枚举类的values方法可以返回所有的枚举值

当为枚举类定义一个属性时,所有的实例都有这个属性,不同的实例需要不同的属性值,定义方式是在枚举值后面加(“对应的属性值”),然后在指定(最好使用get方法)使用枚举类的某个具体的实例时,系统会自动调用枚举类的构造函数,并在里面初始化这个实例的这个属性值


接口不是类,而是对类的一组需求的描述

接口中的所有方法自动地属于public,所以一般不必提供关键字,但是在实现这些方法时,必须指定为public

接口中可以提供常量,会自动的加上public static final,但是不许有实例域

接口变量和抽象类变量是一样的,必须引用实现了接口的类对象

 

内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值