黑马程序员_面向对象(3)

来源:互联网 发布:比特币 2013年淘宝 编辑:程序博客网 时间:2024/06/03 21:12

------- android培训、java培训、期待与您交流! ----------


面向对象三大特征:封装,继承,多态。

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

好处:

1.将变化隔离。

2.便于使用。

3.提高重用性。

4.提高安全性。

封装原则:

1.将不需要对外提供的内容 都隐藏起来。

2.把属性都隐藏,提供公共方法对其访问。

private:私有,权限修饰符:用于修饰类中的成员; 私有只在本类中有效。

1.封装后要提供对应访问的方式。

2.注意:私有仅仅是封装的一种表现形式。

3.只要访问权限达不到,不用私有也是封装。

4.对外提供访问方式,是为了加入逻辑判断等语句。提高代码的健壮性。

private int age;public void setAge(int age){if(age>=0&&age<=120) this.age = age;}public int getAge(int age){   return age;}new Person().setAge = 16;

====================

2).继承:

1.提高了代码的复用性。

2.让类与类之间产生了关系。有了这个关系,才有了多态的特性。

3.通过关键字 extends

4.Java语言中:java只支持单继承,不支持多继承。

错误:A extends B,C

正确:A implements B,C

5.多继承安全隐患:多个父类中定义了相同功能,功能内容不同时,子类对象不确定要运行哪一个。

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

B extends C{...}

A extends B{...} 

如何使用一个继承体系中的功能呢?

1.查阅体系父类的描述,因为父类中定义的是该体系中共性功能。

2.通过了解共性功能,就可以知道该体系的基本功能。

3.在具体调用时,要创建子类的对象。

4.因为父类可能不能创建对象。而创建子类对象可以使用更多的功能.

5.总结:查阅父类功能,创建子类对象使用功能。


====================

3).多态:可以理解为事物存在的多种体现形态。

动物:猫,狗。

猫 x = new 猫();

动物 x = new 猫();

1.多态的体现:

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

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

2.多态的前提。

必须是类与类之间有关系,继承或者实现。

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

3.多态的好处:提高程序的扩展性。

4.多态的弊端:只能使用父类的引用访问父类中的成员。

多态:转型

Animal a = new Cat();//类型提升。 向上转型。a.eat();//如果想要调用猫的特有方法时,如何操作?//强制将父类的引用。转成子类类型。向下转型。Cat c = (Cat)a;c.catchMouse();//不要将父类对象转成子类类型。//转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换。//多态始终都是子类对象在做着变化。//Animal a = new Animal();//Cat c = (Cat)a;


instanceof : 用于判断对象的类型是否相同。Cat intanceof Dog  

多态中成员的特点

父类名 父引用 = new 父类名();

子类名 子引用 = new 子类名();

编译运行都是看相应类中是否有调用的就去。

注意:子引用调用父类方法时。子类中若没有覆写,但子类继承了。所以不会出错。


父类名 父引用 = new 子类名();

1.编译时看父类有没有要调用的方法。(注意:父引用调用子特有方法,要转型)

2.运行时看子类有没有要调用的方法。(从父类继承过来未重写的方法)

3.成员变量都是参考左边。

4.静态方法无论编译和运行,都参考引用所属的类。


====================

4).Object类:

1.是所有对象的直接或者间接父类。

2.定义的方法是所有对象具备的功能。

3.equals比较对象地址值


====================

5).内部类:当描述事物时,事物的内部还有事物,该事物用内部类来描述。

内部类的访问规则:

1.Inner可以直接访问Outer中的成员,包括私有。因为内部类中持有外部类的引用(外部类名.this)

2.Outer要访问Inner,必须建立Inner对象。

class Outer{private int x = 3;class Inner{//内部类//int x = 4;void function(){//int x = 6;System.out.println(Outer.this.x);}}void method(){Inner in = new Inner();in.function();}}
访问格式:

1.当Inner定义在Outer的成员位置上,而且非私有,可以在外部其他类中。

可以直接建立Inner对象。

格式

外部类名.内部类名  变量名 = 外部类对象.内部类对象;

Outer.Inner in = new Outer().new Inner();


2.当Inner在成员位置上,就可以被成员修饰符所修饰。

private:将Inner在Outer中进行封装。

static:Inner就具备static的特性。

static Inner 只能直接访问Outer中的static成员。出现了访问局限。


在外部其他类中,如何直接访问static Inner的非静态成员呢?

new Outer.Inner().function();


在外部其他类中,如何直接访问static Inner的静态成员呢?

Outer.Inner.function();


注意:当Inner中有static成员,该Inner必须是static的。

当Outer中的static方法访问Inner时,Inner也必须是static的。


内部类定义在局部时:

1.不能被成员修饰符修饰

2.能直接访问Outer中的成员,因为还持有Outer中的引用。

3.只能访问被final修饰的局部变量。


============

6).匿名内部类:

1.其实是内部类的简写格式。

2.前提:内部类必须是继承一个类或者实现接口。

3.格式:new 父类或者接口(){定义子类的内容};

4.就是一个匿名子类对象。可以理解为带内容的对象。

5.里面定义的方法最好不要超过3个。

f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});



0 0
原创粉丝点击