Java继承相关知识总结
2017-03-12 21:10
253 查看
Java继承的理解
一、概念:
一个新类从已有的类那里获得其已有的属性和方法,这种现象叫类的继承
这个新类称为子类,或派生类,已有的那个类叫做父类,或基类
继承的好处:代码得到极大的重用、形成一种类的层次体系结构、为多态创造条件
子类的所有方法内部都可以访问父类私有成员以外的所有成员,所谓子类的所有方法也包括子类的私有方法
通过子类对象名可以访问:
父类除私有成员外的所有成员
子类本身的除私有成员外的所有成员
子类可以继承父类除私有成员以外的所有成员
父类的私有成员不可以被子类继承,其他的成员都可以被子类继承
二、继承的访问修饰符作用域
三、继承的特征
Java只支持单继承,不允许多重继承 ※提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。
单继承就是一个类只有一个父类
可以有多层继承,即一个类可以继承某一个类的子类
子类可以继承父类所有的成员变量和成员方法,但子类永远没法继承父类的构造方法。在子类的构造方法中可以使用super(参数列表)调用父类的构造方法
四、使用实例
一、概念:
一个新类从已有的类那里获得其已有的属性和方法,这种现象叫类的继承
这个新类称为子类,或派生类,已有的那个类叫做父类,或基类
继承的好处:代码得到极大的重用、形成一种类的层次体系结构、为多态创造条件
子类的所有方法内部都可以访问父类私有成员以外的所有成员,所谓子类的所有方法也包括子类的私有方法
通过子类对象名可以访问:
父类除私有成员外的所有成员
子类本身的除私有成员外的所有成员
子类可以继承父类除私有成员以外的所有成员
父类的私有成员不可以被子类继承,其他的成员都可以被子类继承
二、继承的访问修饰符作用域
访问修饰符的作用域:
三、继承的特征
Java只支持单继承,不允许多重继承 ※提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。
单继承就是一个类只有一个父类
可以有多层继承,即一个类可以继承某一个类的子类
子类可以继承父类所有的成员变量和成员方法,但子类永远没法继承父类的构造方法。在子类的构造方法中可以使用super(参数列表)调用父类的构造方法
四、使用实例
/* super的使用 */ class A { A() { System.out.println("AAAA"); } A(int i) { } } class B extends A { B() { super(2); //如果把该语句注释掉的化,则编译器默认的是自动隐藏调用super(); 但如果父类没有无参的构造函数,则会报错 //一个子类的构造函数中只能出现一个 super(....) System.out.println("BBBB"); } } class C extends B { C() { //int k = 10; //如果该语句生效 则会出错,因为会导致super()语句不是构造函数的第一条语句 super(); //35行 每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有无参的构造函数,那么在编译的时候就会报错。 //super();语句可以写,也可以不写,不写的化,系统会自动调用的 //如果显示写出来的话,编译器要求该语句前面不能加任何语句,也就是说该语句必须保证是第一条语句 // super()也可以改为super(2); 但前提是父类必须有带一个参数的构造函数,否则也会报错 //如果把35行改为 super(2); 编译时就会报错! System.out.println("CCCC"); } } class TestSuper_1 { public static void main(String[] args) { C cc = new C(); //System.out.println("Hello World!"); } } /* 在j2sdk1.4.2_16中的运行结果是: ----------------------- BBBB CCCC ----------------------- 总结: 1、每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的 构造函数,那么在编译的时候就会报错。 2、如果显示的写出super();语句,则必须保证该语句是第一条语句,否则会出错 3、super();如果不写,则编译器会自动添加,所以此时如果父类没有无参的构造函数就会出错 4、既可以显示写super();前提是父类必须有无参的构造函数 也可以显示写super(实参); 前提是父类必须有带参的构造函数 5、调用父类的构造函数的语句必须借助于super,不能直接写父类的类名,这与C++不同 6、一个构造函数中不能写多个super(参数列表)语句 */
相关文章推荐
- JAVA相关基础知识总结(连载)-3
- JAVA相关基础知识总结(连载)-6
- Java 访问数据库 --java与DataBase相关知识总结(四) java数据库连接池嵌套内部类实现
- Java继承知识总结
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- JAVA相关基础知识总结(连载)-4
- JAVA相关基础知识总结(连载)-15
- Java 访问数据库 --java与DataBase相关知识总结(四) java数据库连接池实现
- Java 访问数据库 --java与DataBase相关知识总结(一)
- Java线程相关知识总结
- JAVA相关基础知识总结(连载)-2
- JAVA相关基础知识总结(连载)-14
- JAVA相关基础知识总结(连载)-10
- Java 访问数据库 --java与DataBase相关知识总结(四) 经典的java数据库连接池
- JAVA相关基础知识总结(连载)
- JAVA相关基础知识总结(连载)-8
- JAVA相关基础知识总结(连载)-12
- JAVA相关基础知识总结(连载)-13
- Java容器学习笔记(二) Set接口及其实现类的相关知识总结
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式