黑马程序员--Java基础--01面向对象

----------------------Android培训Java培训java学习型技术博客、期待与您交流! ----------------------

面向对象的概念

  面向对象其实是一种思考的思想,相对面向过程而言的并基于面向过程,早期的思想是面向过程,通过不断的演化到现在的面向对象。它是一种思想,能让复杂的问题简单化,能让我们的角色转变从执行者变成指挥者。面向过程强调的是功能行为。面向对象是将功能封装进对象,强调具备了功能的对象。提取对象中共性内容,对具体的抽象。

  面向对象的优点:对象对数据的封装解决了一直以来操作和数据分离的问题,提高了代码的可重用性和可维护性;数据封装中对公有和私有数据的区分,保护了私有数据,降低了不同木块数据间的干扰,从而降低了程序开发的复杂程度;通过接口可以达到信息隐藏的目的,方便程序的模块化开发;继承,多态等面向对象中强调的特性,使得程序的扩展性得到进一步加强。

  匿名对象:匿名对象是对象的简化形式
匿名对象使用方式一:当对对象方法只调用一次时,可以用匿名对象来完成,这样写比较简化。如果对一个对象进行多个成员调用,必须给这个对象起名字。匿名对象使用方式二:匿名对象可以作为实际参数进行传递。

  以后开发,其实就是找对象使用。没有对象,就创建一个对象。找对象,建立对象,使用对象。维护对象的关系。

  类和对象的关系。
现实生活中的对象:轿车,卡车,拖拉机
想要描述:提取对象中的共性内容。对具体的抽象。
描述时:这些对象的共性有:轮胎,颜色。

  映射到java中,描述就是class定义的类。具体对象就是对应java在堆内存中用new建立实体。

  成员变量和局部变量:

作用范围:成员变量作用于整个类中。

局部变量作用与函数中,或者语句中。
在内存中的位置:成员变量在对内存中,因为对象的存在,才在内存中存在。局部变量:存在栈内存中。

面向对象例子:

/*
需求:描述汽车(颜色,轮胎数)。描述事物其实就是在描述事物的属性和行为。

属性对应是类中变量,行为对应的类中的函数(方法)。
其实定义类,就是在描述事物,就是在定义属性和行为。属性和行为共同成为类中的成员(成员变量和成员方法).
*/

class Car
{
	//描述颜色
	String color = "红色";
	//描述轮胎数
	int num = 4;
	//运行行为。
	void run ()
	{
		System.out.println(color+"。。"+num);
	}
}
class  CarDemo
{
	public static void main(String[] args) 
	{
		//生产汽车。在java中通过new操作符来完成。
		//其实就是在堆内存产生一个实体。
		Car c = new Car();//就是一个类类型变量。记住:类类型变量指向对象。

		//需求:将已有车的颜色改成蓝色。指挥该对象做使用。在java指挥方式是:对象.对象成员
		c.color="blue";
		c.run();
		Car c1=new Car();
		c1.run();
	}
}
面向对象的三个特征:封装,继承,多态。

1,封装(Encapsulation):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:
将变化隔离。
便于使用。
提高重用性。
提高安全性。
封装原则:
将不需要对外提供的内容都隐藏起来。
把属性都隐藏,提供公共方法对其访问。

class Person
{
	private int age;//封装age年龄数据
	void speak()//对外提供访问的数据接口
	{
		System.out.println("age="+age);//输出年龄数据
	}
}
class PersonDemo
{
	public static void main(String[] args)
	{
		Person p=new Person();
		//p.age=-20;
		p.speak();//调用
	}
}
2,继承:
1,提高了代码的复用性。
2,让类与类之间产生了关系。有了这个关系,才有了多态的特性。
注意:千万不要为了获取其他类的功能,简化代码而继承。必须是类与类之间有所属关系才可以继承。所属关系:is a

例:

class c 
{
	void demo1(){}
}
class A extends C//A继承C
{
	//void demo1(){}
	void demo2(){}
}
class B extend c//B继承C
{
		//void demo1(){}
		void demo3(){}
}
java语言中:java只支持单继承,不支持多继承。
因为多继承容易带来安全隐患:当多个父类中定义了相同功能。
当功能内容不同时,子类对象不确定要运行哪一个。
但是java保留这种机制。并用另一种体现形式来完成表示,多实现。

java支持多层继承。也就是一继成体系

如何使用一个继承体系中的功能呢、?
想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性功能。
通过了解共性功能,就可以知道该体系的基本功能。
那么这个体系已经可以基本使用了。
那么在具体调用时,要创建最子类的对象,为什么呢?
一是因为有可能父类不能创建对象。
二是创建子类对象可以使用更多的功能,包括基本的也包括特有的。

简单一句话:查阅父类功能,创建子类对象使用功能。
3,多态
多态就是某一类事物的多种存在形态。
例如:
人:男人,女人
动物:猫,狗。
猫 x = new 猫();
动物 x = new 猫();

1,多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
2,多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提:存在覆盖。
3,多态的好处
多态的出现大大的提高程序的扩展性。
4,多态的弊端:
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
5,多态的应用:

abstract class Animal
{
	abstract void eat();
}

class Cat extends Animal
{
	public void eat()
	{
		System.out.println("吃鱼");
	}
	public void catchMouse()
	{
		System.out.println("抓老鼠");
	}
}
class Dog extends Animal
{
	public void eat()
	{
		System.out.println("啃骨头");
	}
	public void kanJia()
	{
		System.out.println("看家");
	}
}
class Pig extends Animal
{
	public void eat()
	{
		System.out.println("饲料");
	}
	public void gongDi()
	{
		System.out.println("拱地");
	}
}

//-----------------------------------------------------
class  DuoTaiDemo2
{
	public static void main(String[] args) 
	{
		function(new Dog());
		function(new Cat());
	}
	public static void function(Animal a)
	{
		a.eat();
		if (a instanceof Cat)
		{
			Cat c=(Cat)a;
			c.catchMouse();
		}
		else if(a instanceof Dog)
		{
			Dog c=(Dog)a;
			c.kanJia();
		}
	}
}

----------------------Android培训Java培训java学习型技术博客、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/

你可能感兴趣的:(java征途)