黑马程序员_面向对象之基础篇
来源:互联网 发布:德国人怀念希特勒 知乎 编辑:程序博客网 时间:2024/06/07 22:36
------- android培训、java培训、期待与您交流! ----------
面向对象
面向对象是相对面向过程而言的。
面向对象和面向过程都是一种思想。
面向过程:强调解决具体事务的每一个过程,强调每一步过程和行为,
面向对象:将功能封装进对象,强调具备了功能的对象,通过触发对象的方法来完成程序。
面向过程三个特征:封装,继承,多态
封装:隐藏对象的属性和实现细节,仅对外提供公共访问形式。
好处:将变化隔离,便于使用,提高安全性,提高复用性。
原则:把不需要对外提供的内容都隐藏起来
把属性都隐藏,提供公共方法对其访问
public class Person {private String name;//私有成员变量名字private int age;//私有成员变量年龄Person(String name,int age)//构造函数{this.name = name ;this.age = age;}public void show()//公有型成员函数{System.out.println("name ="+this.name+";age="+this.age);}public String getName(){return this.name;}public int getAge(){return this.age;}}
继承:
这是java的一项核心技术,利用继承,可以基于已存在的类构造一个新类。继承已存在的类就是复用这些类的方法和域。
特点:1、提高了代码的复用性
2、让类与类之间产生关系,有继承才会有多态
3、java只支持单继承
4、java支持多层继承,object是每个类的超类,实现树形结构
class Fu{int num;Fu()//父类隐式构造函数{num = 60;System.out.println("fu run");}Fu(int x)//父类显示构造函数{System.out.println("fu ....."+x);}}class Zi extends Fu{Zi()//子类隐式构造函数{System.out.println("zi run");}Zi(int x)//子类显示构造函数{this();System.out.println("zi ...."+x);}}public class SuperClass {public static void main(String[] args){Zi z = new Zi(9);System.out.println(z.num);}}输出:fu run
zi run
zi ....9
60
总结:子类所有的构造函数默认都会访问父类空参数的构造函数
因为子类每一个构造函数内的第一行都有一句隐式super();
覆写:方法覆写时应遵循的原则(一同两小一大)
一同:方法签名必须相同
两小:子类方法方法的返回值比父类返回值类型更小或相等
子类方法声明抛出的异常应该比父类方法申明抛出异常更小或相等
一大:子类方法的访问权限比父类方法更大或者相等
多态
可以理解为事物存在的多种体现形态。
实现多态的机制:父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
1、多态的体现
父类的引用指向自己的子类对象
父类的引用也可以接收自己的子类对象。
2、多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提,存在覆盖
3、多态的好处
多态的出现提大大的提高了程序的扩展性
4、多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败
在运行时期:参阅对象所属的类中是否有调用的方法。
简单的总结就是:成员函数在多态调用时,编译看左边,运行看右边
class Fu{static int num = 5;void method1(){System.out.println("fu method_1");}void method2(){System.out.println("fu method_2");}static void method4(){System.out.println("fu method_4");}}class Zi extends Fu{static int num = 8;void method1(){System.out.println("zi method_1");}void method3(){System.out.println("zi method_3");}static void method4(){System.out.println("zi method_4");}}class DuoTaiDemo {public static void main(String[] args) {Fu f = new Zi();System.out.println(f.num);f.method1();f.method2();//f.method3();//编译看左边,编译不可通过f.method4();Zi z = new Zi();z.method3();}}输出:5
zi method_1
fu method_2
fu method_4
zi method_3
总结:
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。
- 黑马程序员_面向对象之基础篇
- 黑马程序员_面向对象基础解读
- 黑马程序员_面向对象基础
- 黑马程序员_Java基础_面向对象
- 【黑马程序员】java基础_面向对象
- 黑马程序员_Java基础_面向对象
- 黑马程序员_Java基础_面向对象
- 黑马程序员_java基础_面向对象
- 黑马程序员_面向对象之继承
- 黑马程序员_面向对象之继承
- 黑马程序员_面向对象之封装
- 黑马程序员_面向对象_基础巩固(1)
- 黑马程序员_面向对象_基础巩固(2)
- 黑马程序员_笔迹四_面向对象(基础)
- 黑马程序员----JAVA基础之面向对象
- 黑马程序员----java基础之面向对象
- 黑马程序员----Java基础之面向对象
- 黑马程序员--JAVA基础之面向对象
- LeetCode--Search in Rotated Sorted Array II
- li之间的空隙bug
- 史考特优惠码72617188
- Android DrawableAnimation逐帧动画加载多图(OOM的解决)
- jquery ajax返回请求值却进入error
- 黑马程序员_面向对象之基础篇
- MySQL系列:innodb源码分析之page结构解析
- Source Insight常用快捷键及注释快捷键设置
- 织梦后台 自由列表更新后 去掉不使用目录默认主页
- 黑马程序员_异常处理篇
- 课程设计 个人通讯录管理助手
- 配置支持高并发TCP连接的Linux服务器全攻略
- Xcode删除provisioning profile
- C#中两个问号和一个问号的区别