黑马程序员--面向对象
2015-09-24 23:42
671 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
面向对象是相对面向过程而言,面向对象和面向过程都是一种思想。
面向过程:强调的是功能行为
面向对象的特点
是一种符合人们思考习惯的思想,可以将复杂的事情简单化,将程序员从执行者转换成了指挥者。
-----------------------------------------------------------------
面向对象三大特性:
封装
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:
1.将变化隔离。
2.便于使用。
3.提高重用性。
4.提高安全性。
封装原则:
1.将不需要对外提供的内容都隐藏起来。
2.把属性都隐藏,提供公共方法对其访问。如,getXXX,setXXX。
二,继承
通过extends关键字让类与类之间产生继承关系。
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行
为,只要继承那个类即可。多个类可以称为子类,单独这个类称为父类或者超类。
好处:
继承的出现提高了代码的复用性。
继承的出现让类与类之间产生了关系,提供了多态的前提。
Java只支持单继承,不支持多继承。
一个类只能有一个父类,不可以有多个父类。
原因:
因为多继承容易出现问题。两个父类中有相同的方法,子类到底要执行哪一个是不确定的。
三,多态
多态性简单说就是一个对象对应着不同类型。
体现:
父类或者接口的引用指向或者接收自己的子类对象。
作用:
多态的存在提高了程序的扩展性和后期可维护性。
前提:
1.需要存在继承或者实现关系。
2.需要有覆盖操作。
好处:
提高了代码的扩展性,前期定义的代码可以使用后期的内容。
弊端:
前期定义的内容不能使用(调用)后期子类的特有内容。
接口
当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另一种形式定义和表示,就是接口。
格式:interface{}
接口中的成员修饰符是固定的:
成员常量:publicstaticfinal
成员函数:publicabstract
由此得出结论,接口中的成员都是公共的权限。
接口是对外暴露的规则。
接口是程序的功能扩展。
注意:
1、虽然抽象类中的全局变量和抽象方法的修饰符都可以不用写,但是这样阅读性很差。所以,最好写上。
2、类与类之间是继承关系,类与接口直接是实现关系。
3、接口不可以实例化,能由实现了接口并覆盖了接口中所有的抽象方法的子类实例化。否则,这个子类就是一个抽象类。
static 关键:
1,被static修饰的成员变量,被所有对象所共享。
2,静态随着类的加载而加载,随着类的消失而消失。
3,优先于对象存在。
4,静态成员可以直接被类名所调用。
static的使用注意事项。
1,静态方法只能调用静态成员,不能调用非静态成员。
非静态方法可以调用静态成员,也可以调用非静态成员。
2,在静态方法中不允许出现this,super关键字。
this代表对象,而静态方法执行时还没有对象呢!
3,主函数是静态的。
静态是有访问局限性的,只能访问静态的内容。
静态成员变量和非静态成员变量的区别?
1,
非静态成员变量又称为实例变量。
静态成员变量又称为类变量。
2,
非静态成员变量,随着对象的创建而存在,随着对象的消失而消失。
静态成员变量,随着类的加载而存在,随着类的消失而消失。
3,
非静态变量存在于对象堆内存中。
静态变量存在于方法区中。
4,
非静态变量只能被对象所调用。
静态变量可以被类名调用,也可以被对象调用。
--------------------------------------------------------
this:代表的是一个对象。
代表哪个对象呢?
哪个对象调用this所在的函数,this就代表哪个对象。
this就是当前对象的一个引用。
this:表现形式一:当局部变量和成员变量同名的时候,可以用this来区分。
:表现形式二:构造函数之间的调用可以使用this关键字,后面跟上小括号,指定具体的实参即可明确要调用的构造函数。
特殊情况:注意:调用本类中构造函数的this语句必须定义在构造函数的第一行
因为初始化动作要先完成。
------------------------------------------------------------
final关键字的特点:
1,final是一个修饰符,既可以修饰类,又可以修饰方法,还可以修饰变量。
2,final修饰的类不可以被继承。
3,final修饰的方法不可以被覆盖。
4,final修饰的变量是一个常量,只能赋值一次。
为了将固定的一些数据方便使用,会给这些起一个容易阅读的名称,
为了防止名称存储的数据改变。用final修饰。
一般为final修饰的变量名称都是大写字母组成,如果有多个单词,
每个单词之间用下划线分隔。
面向对象
面向对象概念面向对象是相对面向过程而言,面向对象和面向过程都是一种思想。
面向过程:强调的是功能行为
面向对象的特点
是一种符合人们思考习惯的思想,可以将复杂的事情简单化,将程序员从执行者转换成了指挥者。
-----------------------------------------------------------------
面向对象三大特性:
封装
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:
1.将变化隔离。
2.便于使用。
3.提高重用性。
4.提高安全性。
封装原则:
1.将不需要对外提供的内容都隐藏起来。
2.把属性都隐藏,提供公共方法对其访问。如,getXXX,setXXX。
class Person{ //private:私有,是一个权限修饰符,用于修饰 //不希望别人直接访问赋值,需要通过私有化把属性进行隐藏 private int age ; //通过提供set、get公共方法对其访问 public void setAge( int a){ //在set方法内可以对属性的赋值进行限制 if (a > 0 && a < 130){ age = a; } else System.out .println("错误的数据" ); } public int getAge(){ return age ; } void speak(){ System.out .println("age = " + age); } } class PersonDemo{ public static void main(String[] args){ Person p = new Person(); //通过其他方式访问 p.setAge(20); p.speak(); //赋值不合法,set方法就不允许成功赋值 p.setAge(-20); } }
二,继承
通过extends关键字让类与类之间产生继承关系。
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行
为,只要继承那个类即可。多个类可以称为子类,单独这个类称为父类或者超类。
好处:
继承的出现提高了代码的复用性。
继承的出现让类与类之间产生了关系,提供了多态的前提。
Java只支持单继承,不支持多继承。
一个类只能有一个父类,不可以有多个父类。
原因:
因为多继承容易出现问题。两个父类中有相同的方法,子类到底要执行哪一个是不确定的。
class Person{ String name; int age ; } class Student extends Person{ void study(){ System.out.println("student study..." + age); } } class Worker extends Person{ void work(){ System.out.println("worker work..." + age); } } class ExtendDemo{ public static void main(String[] args){ Student s = new Student(); s. name = "zhangsan" ; s. age = 20; s.study(); Worker w = new Worker(); w. name = "lisi" ; w. age = 30; w.work(); } }
三,多态
多态性简单说就是一个对象对应着不同类型。
体现:
父类或者接口的引用指向或者接收自己的子类对象。
作用:
多态的存在提高了程序的扩展性和后期可维护性。
前提:
1.需要存在继承或者实现关系。
2.需要有覆盖操作。
好处:
提高了代码的扩展性,前期定义的代码可以使用后期的内容。
弊端:
前期定义的内容不能使用(调用)后期子类的特有内容。
abstractvoideat(); } classDogextendsAnimal{ voideat(){ System.out.println("啃骨头"); } voidlookHome(){ System.out.println("看家"); } } classCatextendsAnimal{ voideat(){ System.out.println("吃鱼"); } voidcatchMouse(){ System.out.println("抓老鼠"); } } classPigextendsAnimal{ voideat(){ System.out.println("饲料"); } voidgongdi(){ System.out.println("拱地"); } } classDuoTaiDemo{ publicstaticvoidmain(String[]args){ Catc=newCat(); Dogd=newDog(); method(c); method(d); method(newPig()); } publicstaticvoidmethod(Animala){ a.eat(); } }下面说一说接口与一些关键字:
接口
当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另一种形式定义和表示,就是接口。
格式:interface{}
接口中的成员修饰符是固定的:
成员常量:publicstaticfinal
成员函数:publicabstract
由此得出结论,接口中的成员都是公共的权限。
接口是对外暴露的规则。
接口是程序的功能扩展。
注意:
1、虽然抽象类中的全局变量和抽象方法的修饰符都可以不用写,但是这样阅读性很差。所以,最好写上。
2、类与类之间是继承关系,类与接口直接是实现关系。
3、接口不可以实例化,能由实现了接口并覆盖了接口中所有的抽象方法的子类实例化。否则,这个子类就是一个抽象类。
interface Demo{ public static final int NUM = 4; public abstract void show1(); public abstract void show2(); } class DemoImpl implements /*实现*/Demo{ public void show1(){} public void show2(){} } class InterfaceDemo{ public static void main(String[] args){ DemoImpl d = new DemoImpl(); System.out.println(d.NUM); System.out.println(DemoImpl.NUM); System.out.println(Demo.NUM); } }
static 关键:
1,被static修饰的成员变量,被所有对象所共享。
2,静态随着类的加载而加载,随着类的消失而消失。
3,优先于对象存在。
4,静态成员可以直接被类名所调用。
static的使用注意事项。
1,静态方法只能调用静态成员,不能调用非静态成员。
非静态方法可以调用静态成员,也可以调用非静态成员。
2,在静态方法中不允许出现this,super关键字。
this代表对象,而静态方法执行时还没有对象呢!
3,主函数是静态的。
静态是有访问局限性的,只能访问静态的内容。
静态成员变量和非静态成员变量的区别?
1,
非静态成员变量又称为实例变量。
静态成员变量又称为类变量。
2,
非静态成员变量,随着对象的创建而存在,随着对象的消失而消失。
静态成员变量,随着类的加载而存在,随着类的消失而消失。
3,
非静态变量存在于对象堆内存中。
静态变量存在于方法区中。
4,
非静态变量只能被对象所调用。
静态变量可以被类名调用,也可以被对象调用。
--------------------------------------------------------
this:代表的是一个对象。
代表哪个对象呢?
哪个对象调用this所在的函数,this就代表哪个对象。
this就是当前对象的一个引用。
this:表现形式一:当局部变量和成员变量同名的时候,可以用this来区分。
:表现形式二:构造函数之间的调用可以使用this关键字,后面跟上小括号,指定具体的实参即可明确要调用的构造函数。
特殊情况:注意:调用本类中构造函数的this语句必须定义在构造函数的第一行
因为初始化动作要先完成。
------------------------------------------------------------
final关键字的特点:
1,final是一个修饰符,既可以修饰类,又可以修饰方法,还可以修饰变量。
2,final修饰的类不可以被继承。
3,final修饰的方法不可以被覆盖。
4,final修饰的变量是一个常量,只能赋值一次。
为了将固定的一些数据方便使用,会给这些起一个容易阅读的名称,
为了防止名称存储的数据改变。用final修饰。
一般为final修饰的变量名称都是大写字母组成,如果有多个单词,
每个单词之间用下划线分隔。
相关文章推荐
- Lua编程示例(二):面向对象、metatable对表进行扩展
- C#中面向对象编程机制之多态学习笔记
- 浅谈Lua的面向对象特性
- Lua面向对象之类和继承浅析
- JavaScript面向对象的两种书写方法以及差别
- 浅谈c# 面向对象之类与对象
- C#面向对象特征的具体实现及作用详解
- C# 面向对象的基本原则
- 浅谈对c# 面向对象的理解
- Ruby面向对象编程详解
- php学习 面向对象 课件第1/2页
- PHP程序61条面向对象分析设计的经验小结
- 收集学习asp.net比较完整的面向对象开发流程
- javascript 面向对象编程 万物皆对象
- 不错的JavaScript面向对象的简单入门介绍第1/2页
- [推荐]javascript 面向对象技术基础教程
- javascript 面向对象的JavaScript类
- JavaScript中的面向对象介绍
- javascript实现面向对象类的功能书写技巧
- Javascript 面向对象 继承