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

------- 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值