黑马程序员_面向对象之基础篇

来源:互联网 发布:德国人怀念希特勒 知乎 编辑:程序博客网 时间: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
总结:

在多态中,成员变量的特点:

无论编译和运行,都参考左边(引用型变量所属的类)

在多态中,静态成员函数的特点:

无论编译和运行,都参考左边。

0 0
原创粉丝点击