Java基础知识每日总结(9)---Java继承

继承

1.类、超类和子类
继承的一个明显特征是“is-a”关系。如:每一个班长都是学生,所以可以根据学生类构造一个班长类。这就是在已有类的基础上构造一个新类。
反射是指在程序运行期间发现更多的类及其属性的能力。
①定义子类
在Java中,关键字extends表示继承。语法:public class 子类 extends 父类{ 属性及方法 }
注:在Java中所有的继承都是公有继承。
extends后面的已存在的类被称为超类、基类或父类,前面新的类称为子类、派生类或孩子类。
②重写(覆盖)方法
条件:一定是发生在子父类(包括直接父类和间接父类)中的,方法的方法名、参数列表、返回值类型、修饰符一定相同,静态方法和私有方法不能被覆盖。
在覆盖方法是可以使用super关键字,它可以指示编译器调用父类的同名私有方法来避免覆盖方法时造成的无限调用死循环。
③子类构造器
在子类的构造器方法中可以用super(参数列表)这个简写语句来调用父类中满足此参数列表的构造器。
注:使用super调用构造器的语句必须是子类构造器的第一条语句。
如果子类的构造器没有显示地调用父类的构造器,则将自动调用父类默认的即无参构造器。
注:this和super在构造器中调用其他构造器的语句都是只能作为第一条语句出现。
④多态
定义一个学生变量,可以给它赋值学生对象,也可以给它赋值班长对象,这种现象叫做多态。在Java中,对象变量是多态的。一个学生变量既可以引用学生类对象,又可以引用一个学生类的任何一个子类的对象。多态有一个动态绑定机制。
⑤阻止继承
在Java中如果不希望一个类有子类,则这个类被称为final类,在定义这个类时使用final修饰符就表明这个类是final类。如果一个类中的一个方法被声明为final,则子类就不能覆盖这个方法,而final类中的所有方法将自动成为final方法,但这并不包括类中的属性,如果一个类中的属性被声明为final,则在构造对象之后就不允许改变它的值。
⑥强制类型转换
类对象之间的强制类型转换和基本数据类型之间的强制类型转换语法相同。只能在继承链内进行类型转换,在将父类转换成子类之前,应使用instanceof进行检查。
⑦抽象类
使用abstract关键字可以将类或方法定义为抽象的,包含一个或多个抽象方法的类本身必须被声明为抽象的。抽象方法在基类中充当着占位的角色,它们的具体实现在子类中。一个类即使不含抽象方法也可以将它定义为抽象类,抽象类不能被实例化。可以定义一个抽象类的对象变量,但是它只能引用非抽象子类的对象。
即便不能实例化抽象类,但可以用static关键字来修饰抽象类的方法,然后通过抽象类名.方法名来直接调用抽象类的方法。static方法永远不受到实例化对象或结构的限制。
⑧访问修饰符

  • private—仅对本类可见
  • public—对所有类可见
  • protected—对本包中的类和其类的所有子类可见
  • 默认没有修饰符—对本包可见

2.Object类—所有类的父类
Object类是Java中所有类的父类,每个类都是由它扩展而来的。可以使用Object类型的变量引用任何类型的对象。
注:在Java中只有基本数据类型不是对象。
①equals方法
Object类中的equals方法用于检测一个对象是否等于另外一个对象。
②hashCode方法
散列码(hash code)是由对象导出的一个整型值,且它是没有规律的。hashCode方法定义在Object类中,每个对象都有一个默认的散列码,其值为对象的存储地址。字符串的散列码是由内容导出的,内容相同散列码就相同。
③toString方法
此方法用于返回表示对象值的字符串。

3.泛型数组列表
Java中有一个ArrayList类,它具有自动调节数组容量的功能。ArrayList是一个采用类型参数的泛型类。为了指定数组列表保存的元素对象类型,要用一对尖括号将类名括起来加在后面,如ArrayList<类名>。声明一个数组列表:ArrayList<类名> 变量名=new ArrayList<类名>();或(Java SE7及以上)ArrayList<类名> 变量名=new ArrayList<>();
使用add方法将元素添加到数组列表中,语法:变量名.add(元素);
使用size方法将返回数组列表中包含的实际元素数目,语法:变量名.size();
如果确认数组列表不会再添加任何元素时,可以调用trimToSize方法,回收多余的存储空间。
使用toArray方法将数组列表中的元素拷贝到一个数组中。

4.对象包装器和可变参数
所有的基本数据类型都有一个与之对应的类,如Integer类对应基本数据类型int。这些类称为包装器,且它们是final修饰的。如果想定义一个整型数组列表,则尖括号中应该为Integer。
注:只有在Java SE5及以上才能使用可变参数。
可变参数在以前格式化输出就见过,printf就是可变参数,在它里面可以放很多参数。printf方法的构造如下:

public PrintStream printf(String format, Object ... args) {
        return format(format, args);
    }

在其中…是Java代码的一部分,它表示可以接收很多参数。可变参数前面可以加其他参数,但可变参数后面再加其他参数就会报错。可以将数组传递给可变参数的最后一个参数。

5.枚举类
所有的枚举类型都是Enum类的子类。其中有一个toString方法,它能够返回枚举常量名。每个枚举类型都有一个静态的values方法,它会返回一个包含全部枚举值的数组。
ordinal方法返回enum声明中枚举常量的位置,位置从0开始计数。

6.反射
反射库提供了一个工具集。能够分析类能力的程序称为反射。反射机制可以用来在运行时分析类的能力,在运行时查看对象,实现通用的数组操作代码,利用Method对象。使用反射的主要人员是工具构造者,这里不做过多说明。

7.关于继承的一些建议
①将公共的方法和属性放在父类中;
②尽量不要使用protected修饰的方法和属性;
③除非所有继承的方法都有意义,否则不要使用继承;
④使用多态,而非类型信息。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值