Java12-java语法基础继承
Posted Rainy113
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java12-java语法基础继承相关的知识,希望对你有一定的参考价值。
Java12-java语法基础(十一)继承
一、继承
学习要求:
1、 理解继承的概念与作用
2、 掌握继承的实现机制
3、理解继承中的覆写与覆盖
4、掌握super关键字的使用
回顾:
1、对客观世界进行分析,抽象成类,并利用java语言实现。
2、利用private进行封装。
3、利用this关键字引用类中的数据成员和方法。
1、继承的概念和作用
同类事物既有共性又有其各自的特殊性。
1)继承机制
在由一般类和特殊类形成的一般-特殊之间 的结构中,把一般类和所有特殊类的对象实例都共同具有的属性和操作一次性地在一般类中进行的定义,在特殊类中不再重复定义一般类中已经定义的属性和操作,特殊类自动地拥有一般类(以及所有更上层的一般类)中定义的属性和操作。特殊类的对象拥有其一般类的对象的全部属性与操作(除非进行限制),称作特殊类对一般类的继承。
2)继承特征
(1)传递:类C继承了类B,类B继承了类A,则类C既有从类B继承下来的属性与方法,也有从类A那里继承下来的属性和方法。
(2)类之间的层次关系:简化了人们对客观事物的认识和描述,能清晰体现相关类之间的层次结构关系。
(3)软件复用功能:类B继承类A,那么建立类B时只需要描述与父类(类A)不同的特征(数据成员和成员方法)即可。这种方法能减少代码量和数据的冗余度,大大增加程序的重用性。
(4)已维护性:减少了模块之间的接口和界面,大大增强了软件的易维护性。
(5)多重继承机制:接口机制来实现多重继承,即一个子类有多个父类。
附:
耦合:模块和模块之间的紧密程度
类聚:模块内部的功能
开发中:高内聚、低耦合好。
2、实现继承机制
java中,通过extend来实现继承
格式:
class 子类名称 extend 父类名称{
子类数据成员
子类成员方法
}
注意:
(1)父类:基类、超类---->一般类
强调:在java中,所有类的基类都是Object类:java.lang.Object
(2)子类:派生类---->特殊性
(3)在继承中,子类自动拥有父类的可访问成员。
课堂练习:交通工具类
注意:子类虽然拥有父类属性,但不能直接访问父类的私有成员,非私有成员可以访问
3、方法的覆写和属性覆盖
(1)方法覆写:子类拥有与父类非私有成员方法同名的成员方法
必须保证被子类覆写的方法不能拥有比父类更为严格的访问权限。
(2)属性覆盖:子类拥有与父类非私有数据成员同名的数据成员
在数据成员覆盖关系中,成员方法使用数据成员按照就近原则使用数据成员。
4、super关键字
(1)可以访问直接父类中被子类覆盖的同名数据成员:super.数据成员名
直接父类 ---> extends后的类
在java中,只能单继承,一个类的直接父类只能有一个。
(2)可以访问直接父类中被子类覆写的同名成员方法:super.成员方法名(参数);
(3)调用直接父类的构造方法,必须放第一行:super();
强调:父类必须显示的写出空构造方法
继承机制中调用构造方法的顺序:先父类再子类
5、向上转型
父类:Animal
子类:Cat,Dog
向上转型:
Animal dog = new Dog();
Animal cat = new Cat();
说明:Animal类型的dog可以调用Dog子类的方法,Animal类型的dog可以调用Dog子类的方法。
向上转型可以隐藏一些实现细节
二、final和instanceof
(一)final关键字
1、修饰类:修饰的类不能被继承,即不能派生子类
final class{}
2、修饰成员方法:修饰的方法不能被子类的方法覆盖
final public void printInfo(){}
3、修饰数据成员:修饰的数据成员或者局部变量表示常量,不能更改它的值;这时一般数据成员全部大写,单词用下划线分隔。
final private String name;
注:被final修饰的常见的类:String、System……
强调:子类不能覆盖父类方法时,子类中的成员方法名与父类的成员方法名相同会报错,即此时子类中不可以出现与父类同名的方法。
4、final修饰引用变量:该变量只能始终引用一个对象,但可以改变对象的内容
(二)instanceof关键字/运算符
Java的常用类库有几百个,在软件开发过程中创建很多不同类型的对象,经常需要判断某个对象属于哪个类,利用instanceof关键字可以判断一个对象是哪个类的实例。
1、语法格式:
对象 instanceof 类;
结果为true说明对象是类的实例;false说明对象不是类的实例
示例:
class A{}
class B extends A{}
测试:
A a = new A();
B b = new B();
b insctaceof B;//true
b insctaceof A;//true
a insctaceof B;//false
结果:对象被子类创建后,它既是子类的实例,也是父类的实例。
(三)小结
1、final关键字的主要作用?
(1)修饰类,不能被继承
(2)修饰方法,不允许覆写
(3)修饰成员变量,不允许更改,为常量
(4)修饰引用类型变量,始终引用一个对象,但可以改变对象的内容
2、final关键字修饰数据有哪些要求?
(1)修饰局部变量只能赋值一次
(2)修饰非静态数据成员必须在构造方法中初始化,或者直接初始化
(3)修饰的静态数据成员必须初始化
3、为什么使用instanceof关键字?
判断对象是否是类的实例
以上是关于Java12-java语法基础继承的主要内容,如果未能解决你的问题,请参考以下文章