您的位置:首页 > 职场人生

黑马程序员--面向对象

2015-07-02 16:10 405 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


1. 面向对象的概念 :

面向对象是一种思想,相对于面向过程注重行为功能,面向对象把对象作为主体,通过调用对象的方法来完成相应的功能。在面向对象的世界里,万物皆对象,而对象就有相应的属性和功能,我们通过对这个世界事物的抽取,归纳,总结,能够更加高效的处理不同的事物。



2. 特点

是一种符合人们思考习惯的思想,可以将复杂的事情简单化,将程序员从执行者转换成了指挥者。

完成需求时:

1. 先要去找具有所需功能的对象来用。

2. 如果该对象不存在,那么创建一个具有所需功能的对象。

这样可以简化开发并提高复用。

面向对象三个特征:封装、继承、多态。

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

好处:

1. 将变化隔离。

2. 便于使用。

3. 提高重用性。

4. 提高安全性。

函数的封装:

就用private进行私有,私有是封装里面的一种表现形式。

封装是指隐藏对象的属性和实现细节,一旦私有了就在类外,你是不能访问,只能提供公共访问方式。

关于函数的继承;

继承的使用:1、是为了提高代码的复用性。2、让类与类之间产生关系,有了这个关系,才有了多态的特性。

在java语言中,java只支持单继承,不支持多继承,在C语言中就支持多继承。

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

当你在用继承做题的时候,简单的一句话:先查阅父类的功能,在创建于子类对象的使用。

下面以继承为例子

需求1:老的手机显示的时候是名字,现在新手机显示是名字和音乐。

需求2:以前用名字显示出来,现在我想让它显示出family和音乐。

需求3:定义一个变量,把新的手机里面的变量引用到老的手机。

需求1

class Tel

{

void show()

{

System.out.println("name");

}

}

class NewTel

{

void show()

{

System.out.println("name");//也可以用另一种方式表示:super.show();

System.out.println("music");

}

}

class Shouji

{

public static void main(String[] args)

{

NewTel c=new NewTel();

c.show()

}

}

需求2

class Tel

{

void show()

{

System.out.println("name");

}

}

class NewTel

{

public void show()

{

System.out.println("family");

System.out.println("music");

}

}

class Shouji

{

public static void main(String[] args)

{

NewTel c=new NewTel();

c.show()

}



}

需求3

class Tel

{

int num=4;

void show()

{

System.out.println("name");

}

}

class NewTel extends Tel //extends 表示继承的意思

{

int num=8;

public void show() //public 属于权限最大的一个

{

System.out.println("family"); //把上面的“name” 改为 “family”

System.out.println(super.num); //super.num 代表的是父类的引用,this.num 代表的是本类对象的引用

System.out.println("music");

}

}

class Shouji

{

public static void main(String[] args)

{

NewTel c=new NewTel();

c.show();

}



}

1.多态的体现

父类的引用指向了自己的子类对象

父类的引用也可以接收自己的子类对象

2.多态的前提

必须是类与类之间有关系,要么继承,要么实现

通常还有一个前提,存在覆盖

3.多态的好处

多态的先大大的提高了代码的扩展性

4.多态的弊端

提高了扩展性,但是只能使用父类的引用访问父类中的成员



通过继承实现多态

[java] view plaincopyprint?class Animal

{

void eat()

{

System.out.println("Animal eat");

}

}

class Cat extends Animal

{

void eat()//覆盖父类方法

{

System.out.println("Cat eat");

}

void catchMouse()//特有方法

{

System.out.println("Cat catchMouse");

}

}

class DuoTaiDemo

{

public static void main(String[] args)

{

Animal a=new Cat();//类型提升,向上转型。(byte b=2,int x=b,b转为int型)

a.eat();

//如果想要调用猫的特有方法时,如何操作?

//强制将父类的引用转成子类类型,向下转型。

Cat c=(Cat)a;//向下转型。

c.catchMouse();

//千万不要出现这样的操作,就是将父类对象转成子类类型。

//我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以被强制转换。

//多态自始至终都是子类对象在做着变化。

//Animal a=new Animal();

//Cat c=(Cat)a;不行,动物不能转成猫

//对象多态的实现自始至终都是子类对象在变化

//Animal a=new Animal();这里的a是自己的对象

//Animal a=new Cat();这里的a是子类的引用

}

}

class Animal

{

void eat()

{

System.out.println("Animal eat");

}

}

class Cat extends Animal

{

void eat()//覆盖父类方法

{

System.out.println("Cat eat");

}

void catchMouse()//特有方法

{

System.out.println("Cat catchMouse");

}

}

class DuoTaiDemo

{

public static void main(String[] args)

{

Animal a=new Cat();//类型提升,向上转型。(byte b=2,int x=b,b转为int型)

a.eat();

//如果想要调用猫的特有方法时,如何操作?

//强制将父类的引用转成子类类型,向下转型。

Cat c=(Cat)a;//向下转型。

c.catchMouse();

//千万不要出现这样的操作,就是将父类对象转成子类类型。

//我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以被强制转换。

//多态自始至终都是子类对象在做着变化。

//Animal a=new Animal();

//Cat c=(Cat)a;不行,动物不能转成猫

//对象多态的实现自始至终都是子类对象在变化

//Animal a=new Animal();这里的a是自己的对象

//Animal a=new Cat();这里的a是子类的引用

}

}

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: