------- 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
总结:
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。