写代码的四点:
1.明确需求。要做什么?
2.分析思路。要怎么做?(1,2,3……)
3.确定步骤。每一个思路要用到哪些语句、方法和对象。
4.代码实现。用具体的语言代码将思路实现出来。
学习新技术的四点:
1.该技术是什么?
2.该技术有什么特点?(使用需注意的方面)
3.该技术怎么使用?(写Demo)
4.该技术什么时候用?(在Project中的使用场景 )
----------------------早计划,早准备,早完成。-------------------------
想要了解面向对象首先要知道什么是对象。
对象
对象就是现实世界中存在的人、事、物体等实体在计算机逻辑中的映射。
对象具有唯一性、抽象性、继承性、多态性。每个对象都有自身唯一的标识,通过这种标识可找到相应的对象,在对象的整个生命周期中,它的标识都不会改变,不同的对象不能有相同的标识;抽象性是指将具有一致的属性和行为的对象抽象成类,一个类就是一个对象,因此对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象;继承性也是类之间的一种关系,是子类自动共享父类的数据结构和方法的机制,;多态性是指相同的操作、函数或过程可作用于多种类型的对象上并获得不同的结果,多态性增强了软件的灵活性和重用性。
一切事物皆对象,对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象。对象不仅能表示具体的事物,还能表示抽象的规则、计划和时间。对象具有状态和行为,一个对象用数据值来描述它的状态,用操作改变它的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。
面向对象(OO——Object Oriented)
面向对象是一种思想,也是软件开发方法。面向对象的方法是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法。 在面向对象出现之前,计算机编程是基于面向过程的,面向过程强调的是功能行为。而面向对象是将功能封装进对象,强调具备了功能的对象。通过面向对象的方式,将现实世界的事物抽象成对象,将现实世界的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。所以说面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画现实世界和设计、构建相应的软件系统。
面向对象的三大特征: 封装性、继承性、多态性
1.封装性:只隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
好处:将变化隔离、便于使用、提高复用性、提高安全性;
原则:将不需要对外提供的内容隐藏起来,把属性隐藏,提供公共方法对其访问。
注:私有仅仅是封装的一种体现形式而已。
2.继承性:extends,两种事物间存在着一定的所属关系,继承的类就可以从被继承的类中获取一些属性和方法,提高了代码的复用性。继承是多态的前提。继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。
注:子类中所有的构造函数都会默认访问父类中的空参数的构造函数,默认第一行有super();若无空参数构造函数,子类中需指定;另外,子类构造函数中可自己用this指定自身的其他构造函数。
3.多态性:同一个对象(事物),在不同时刻体现出来的不同状态。父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。
好处:提高了程序的扩展性、灵活性、简化性;
弊端:当父类引用指向子类对象时,虽提高了扩展性,但只能访问父类中具备的方法,不可访问子类中的方法;即访问的局限性。
前提:a:实现或继承关系;
b:方法重写(复写父类方法);
c:父类引用指向子类对象;
多态性详解
多态性可以分为两类:
1.方法的重载与重写;
a:重载:在同一个类中,方法名相同,参数列表不同,与返回值类型无关;
重载的分类:a.1:参数个数不同;
a.2:参数类型不同;
b:重写:子类集成父类后,覆盖父类中的某个方法的操作。
2.对象的多态性:是从继承关系中的多个类而来
a:向上转型:将子类实例转为父类实例,格式:父类 父类对象 = 子类实例;(自动转换)以基本数据类型操作为例:int i="a";(因为char的容量比int小,所以可以自动完成)
b:向下转型:将父类实例转为子类实例,格式:子类 子类对象 = (子类)父类实例;(强制转换)以基本数据类型操作为例:char c = (char)97;因为整型是4个字节比char2个字节要大,所以需要强制完成。
多态中的成员访问特点:
1.成员变量:
编译看左边,运行看左边。(Fu fu = new Zi(); fu.num调用的事父类Fu的num)
2.构造方法:
创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
3.成员方法:
编译看左边,运行看右边。(存在方法重写,所以运行看右边)
4.静态方法:
编译看左边,运行看左边。(静态和类相关,算不上重写,所以运行看左边)
多态性案例
package com.wy.test;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import butterknife.ButterKnife;
import butterknife.InjectView;
/**
* 多态性:同一个对象(事物),在不同时刻体现出来的不同状态。父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。
* 好处:提高了程序的扩展性、灵活性、简化性;
* 弊端:当父类引用指向子类对象时,虽提高了扩展性,但只能访问父类中具备的方法,不可访问子类中的方法;即访问的局限性。
* 前提:a:实现或继承关系;
* b:方法重写(复写父类方法);
* c:父类引用指向子类对象;
*/
public class Button1Activity extends Activity {
@InjectView(R.id.tv1)
TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_btn1);
ButterKnife.inject(this);
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
/**
* 多态中的成员访问特点:
* 1.成员变量:
* 编译看左边,运行看左边。(Fu fu = new Zi(); fu.num调用的事父类Fu的num)
* 2.构造方法:
* 创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
* 3.成员方法:
* 编译看左边,运行看右边。(存在方法重写,所以运行看右边)
* 4.静态方法:
* 编译看左边,运行看左边。(静态和类相关,算不上重写,所以运行看左边)
*/
tv1.append("答案:" + "\n");
tv1.append(a1.show(b) + "\n"); //①A and A
tv1.append(a1.show(c) + "\n"); //②A and A
tv1.append(a1.show(d) + "\n"); //③A and D
tv1.append(a2.show(b) + "\n"); //④B and A ...
tv1.append(a2.show(c) + "\n"); //⑤B and A ...
tv1.append(a2.show(d) + "\n"); //⑥A and D
tv1.append(b.show(b) + "\n"); //⑦B and B
tv1.append(b.show(c) + "\n"); //⑧B and B
tv1.append(b.show(d) + "\n"); //⑨A and D
}
}
class A {
public String show(D obj) {
return ("A and D");
}
public String show(A obj) {
return ("A and A");
}
}
class B extends A {
public String show(B obj) {
return ("B and B");
}
public String show(A obj) {
return ("B and A");
}
}
class C extends B {
}
class D extends B {
}
---------------------------------------------------------------------------------------------------------------------------
早计划,早准备,早完成。 欢迎关注!交流!Star!
GitHub:https://github.com/wangyang0313
微信公众号:一个灵活的胖子MrWang