黑马程序员----面向对象

 

Java之面向对象

-----------------ASP.Net+Android+IOS开发、Net培训期待与您交流--------------------

面向对象的概念

面向对象是相对面向过程而言。

面向对象和面向过程都是一种思想。

面向过程强调的是功能行为,面向对象将功能封装进对象,强调具备了功能的对象。

例如  人开门。

用面向过程的思想编程的话,我们是对人去开门这个动作进行编程。

而用面向对象的思想编程,就是门这个对象,它有开门和关门的方法,人发出信号让门去执行哪种方法。

所以面向对象有如下特点:

1.是一种符合人们思考习惯的思想。

2.可以将复杂的事情简单化。

3.将程序员从执行者转换成了指挥者。

面向对象的特征

封装(encapsulation)

继承(inheritance)

多态(polymorphism)

 

什么是封装?

面向对象思想有个忌讳,那就是把对象自己的属性和内部实现细节暴露给别的对象,虽是代码但也应该享有隐私权。把不想或者不该告诉别人的东西封起来,把可以告诉别人的公开,这就是封装的基本概念。我们来看看下面的代码 

例1

public class Person
{
	prviate String name;
	protected int  age;
	private void setName(String name)
	{
		this.name = name;
	}
	public String getName()
	{
		return name;
	}
	
}

我们声明了一个Person类,里面有一个name属性。name属性的getName方法是公开的,setName方法是私有的,试想一个人如果走在大街上谁见了他都可以给他取个名字,那岂不乱了套了。但人又不能没有名字,所以有一个setName的方法,前面说了名字不是谁都能取的,因此我们给这个方法加了一个pirvate访问修饰符,也就是说只有这个类里可以调用,我们把“这个类”设想成这个人所在的家庭,一个小孩子生下来,可能是爷爷奶奶给取名,也可能是爸爸妈妈取名。

封装的目的就是根据类之间的关系与设计需要,把不该暴露出来包裹好,把可以让别的对象调用的公开,让对象在内存里活得井然有序。如果你有点儿拿捏不准什么是该暴露出来的什么是该封装起来的,那么你就联系到实际生活中的例子去想想。看看你家的马桶,放水的按钮是暴露出来的,但您按下按钮之后内部是如何运作把水放出来的,这就不用用户关心了,自然也就封装起来了,如果您还印象不够深,那就想想,马桶排水的管道应该暴露还是封装起来呢。

 什么是继承?

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,多个类可以称为子类,只要继承那个类即可。这就是继承的基本概念。其中多个类可以称为子类,单独这个类称为父类或者超类。子类可以直接访问父类中的非私有的属性和行为,通过 extends 关键字让类与类之间产生继承关系。

例如 class Student extends Person{}。

继承的出现提高了代码的复用性。
继承的出现让类与类之间产生了关系,提供了多态的前提。

继承的特点

Java只支持单继承,不支持多继承

class SubDemo extends Demo{} //ok
class SubDemo extends Demo1,Demo2...//error

Java支持多层继承(继承体系)

class A{}
class B extends A{}
class C extends B{}

继承中的super和this关键字

this代表本类对象的引用,可参考例1中的this的调用
super代表父类的内存空间的标识。
当子父类出现同名成员时,可以用super进行区分,我们看看下面的代码

class Fu
{	
	String name ="fu";
	Fu(){}
}
class Zi extends Fu
{
	String name ="zi";
	Zi()
	{
		super();
	}
	public void speak()
	{
		System.out.println(super.name);
	}
}

 

我们在子类的方法中想要调用父类的成员时,我们可以通过super.XX的方式进行调用。

子类要调用父类构造函数时,可以使用super语句。

继承中的函数覆盖(Override)

子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者复写。
父类中的私有方法不可以被覆盖。
在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取。

覆盖注意事项:
覆盖时,子类方法权限一定要大于等于父类方法权限
静态只能覆盖静态。
覆盖的应用:
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容

子类的实例化过程

子类中所有的构造函数默认都会访问父类中空参数的构造函数
因为每一个构造函数的第一行都有一条默认的语句super();
子类会具备父类中的数据,所以要先明确父类是如何对这些数据初始化的。
当父类中没有空参数的构造函数时,子类的构造函数必须通过this或者super语句指定要访问的构造函数

什么是多态?

定义:某一类事物的多种存在形态

例:动物中猫,狗。
猫这个对象对应的类型是猫类型
猫 x = new 猫();
同时猫也是动物中的一种,也可以把猫称为动物。
动物  y = new 猫();
动物是猫和狗具体事物中抽取出来的父类型。
父类型引用指向了子类对象。

多态的特点

成员函数:
编译时:要查看引用变量所属的类中是否有所调用的成员。
在运行时:要查看对象所属的类中是否有所调用的成员。
成员变量:
只看引用变量所属的类。

-----------------ASP.Net+Android+IOS开发、Net培训期待与您交流--------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值