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

黑马程序员--面向对象

2015-09-24 23:42 671 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

面向对象

面向对象概念

面向对象是相对面向过程而言,面向对象和面向过程都是一种思想。

面向过程:强调的是功能行为



面向对象的特点

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

-----------------------------------------------------------------
面向对象三大特性:
封装

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

好处:

    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修饰的变量名称都是大写字母组成,如果有多个单词,
每个单词之间用下划线分隔。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息