包及多态
2014-03-11 19:38
141 查看
------------------2013.12.19-------------------
一、包的访问权限
1)public:本类、同包、不同包子类、不同包且非子类
2)protected:本类、同包、不同包子类
3)缺省:本类、同包
4)private:本类
二、对类的访问权限只有public和缺省两种,但是可以写成内部类
1)创建内部类
2)先创建外部类,再用外部名去点new内部类
Student st = new Student(); //外部类
T t1 = st.new T(); //第一种
T t2 = new Student().new T(); //第二种
三、什么是方法覆写?
1)子类中定义了与父类中同原型的方法,就称为方法的覆写
同原型方法:
·访问控制符:子类的要比父类的访问权限要大,或者是相同
·方法名相同
·返回值类型一样
·参数列表一样
四、方法覆写时所考虑的权限
1)访问控制符:子类的要比父类的访问权限要大,或者是相同
2)但这并不一定就会存在方法的覆写,比如说父类的访问权限为private
五、方法覆写的特点
1)方法重写必须发生在继承关系中,并且子类中出现父类中同原型的方法,
那么认为子类的方法覆盖了父类的方法
2)子类的实例调用被覆盖的方法,将调用的是自己的方法,而父类的方法将被隐藏
3)如果子类想要访问父类中的方法,则必须使用super关键字来完成
一般语法:super.方法名
六、关于方法的调用问题
1)如果不使用super调用,直接调用print()也可以,
但是前提方法不能被覆写,否则会出现死循环
2)直接调用print()方法,相当于隐藏了一个this.print()方法,
它会最先在本类中去找其方法,再依次从上至下去寻找
七、方法重写和方法重载的区别:
区别点 重载 覆写
单词 Overloading Overriding
定义 只要方法名相同、参数列表不同、 方法名称、参数的类型、
个数不同、在同一作用域中 返回值类型全部相同
对权限没有要求 被覆盖的方法不能拥有更严格的权限
范围 发生在一个类中 发生在继承类中
八、属性的覆盖
1)主要是指子类中声明了与父类同名的属性
2)一般很少去研究它, 因为其意义不大
五、引用转型
1)基类的引用指向派生类的对象
Person per = new Student();
2)派生类的引用不可以指向基类的对象
Student st = new Person();
六、多态
1)父类引用指向哪个子类的实例就是调用哪个类中的方法
2)父类的引用指向子类的对象时,调用的都是一个方法,但是却有不同的结果
3)多态分为静态多态和动态多态
七、多态的分类:
1)静态多态:方法重载
在编译器就能确定调用某个方法
2)动态多态:方法重写
·程序运行时才确定调用某个方法
3)条件
·必须要有继承的情况
·在继承中必须要有方法覆盖
·必须由基类的引用指向派生类的对象,并且通过基类的引用调用被覆盖的方法
一、包的访问权限
1)public:本类、同包、不同包子类、不同包且非子类
2)protected:本类、同包、不同包子类
3)缺省:本类、同包
4)private:本类
二、对类的访问权限只有public和缺省两种,但是可以写成内部类
1)创建内部类
2)先创建外部类,再用外部名去点new内部类
Student st = new Student(); //外部类
T t1 = st.new T(); //第一种
T t2 = new Student().new T(); //第二种
三、什么是方法覆写?
1)子类中定义了与父类中同原型的方法,就称为方法的覆写
同原型方法:
·访问控制符:子类的要比父类的访问权限要大,或者是相同
·方法名相同
·返回值类型一样
·参数列表一样
四、方法覆写时所考虑的权限
1)访问控制符:子类的要比父类的访问权限要大,或者是相同
2)但这并不一定就会存在方法的覆写,比如说父类的访问权限为private
五、方法覆写的特点
1)方法重写必须发生在继承关系中,并且子类中出现父类中同原型的方法,
那么认为子类的方法覆盖了父类的方法
2)子类的实例调用被覆盖的方法,将调用的是自己的方法,而父类的方法将被隐藏
3)如果子类想要访问父类中的方法,则必须使用super关键字来完成
一般语法:super.方法名
六、关于方法的调用问题
1)如果不使用super调用,直接调用print()也可以,
但是前提方法不能被覆写,否则会出现死循环
2)直接调用print()方法,相当于隐藏了一个this.print()方法,
它会最先在本类中去找其方法,再依次从上至下去寻找
七、方法重写和方法重载的区别:
区别点 重载 覆写
单词 Overloading Overriding
定义 只要方法名相同、参数列表不同、 方法名称、参数的类型、
个数不同、在同一作用域中 返回值类型全部相同
对权限没有要求 被覆盖的方法不能拥有更严格的权限
范围 发生在一个类中 发生在继承类中
八、属性的覆盖
1)主要是指子类中声明了与父类同名的属性
2)一般很少去研究它, 因为其意义不大
五、引用转型
1)基类的引用指向派生类的对象
Person per = new Student();
2)派生类的引用不可以指向基类的对象
Student st = new Person();
六、多态
1)父类引用指向哪个子类的实例就是调用哪个类中的方法
2)父类的引用指向子类的对象时,调用的都是一个方法,但是却有不同的结果
3)多态分为静态多态和动态多态
七、多态的分类:
1)静态多态:方法重载
在编译器就能确定调用某个方法
2)动态多态:方法重写
·程序运行时才确定调用某个方法
3)条件
·必须要有继承的情况
·在继承中必须要有方法覆盖
·必须由基类的引用指向派生类的对象,并且通过基类的引用调用被覆盖的方法
相关文章推荐
- C#与.net高级编程 C#的多态介绍
- C#中的多态深入理解
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- c#基础学习之多态
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- 从汇编看c++中多态的应用
- javascript 面向对象全新理练之继承与多态
- Java多态的使用注意事项
- C++基础之this指针与另一种“多态”
- 深入解析C++中的虚函数与多态
- C++多态的实现及原理详细解析
- JAVA 多态 由浅及深介绍
- python学习手册中的python多态示例代码
- 鸡啄米:C++编程入门系列之四十四(多态性:多态的概念和类型)
- 覆盖、重载、多态
- 我对编程中常见名词的理解
- 面向对象的三大特征是继承、封装和多态
- 【小宝解惑】虚函数和纯虚函数的作用与区别
- java 多态----静态时static和类型转换
- 云科技时代2018:数字化转型进入新阶段