您的位置:首页 > 编程语言 > Java开发

OOP----java面向对象理解

2015-09-28 16:12 369 查看
------- android培训java培训、期待与您交流! ----------

面向对象编程:是一中编程思想,将复杂的问题简单化,有利于我们理解,写代码;java实现归纳总结为:抽象,封装,继承,多态;

1抽象:将需求,现实生活中的问题分析,解析之后所细化出来的一些属性和功能的描述,并分类

2封装:在抽象结束以后,就将抽象的内容用代码封装起来,通常的做法是,谁拥有数据,他就要被封装成类;

特点:将所有的属性封装起来,不让外部来修改,对外提供修改方法

封装的权限修饰符:从小到大

private :本类中访问

default  :当前类所在的文件中可以访问

protect  :本类以及其子类可以访问

public  :最大权限,都可以访问

3继承:便于代码的复用,也将类型划分归类

特点:提高了代码的复用性,让类与类产生了一个关系,是多态的前提,java中类只支持单继承,而接口可是多继承的

弊端:打破了封装,类设计好之后不易修改

注意事项:子类不能继承父类的私有成员,因为私有成员是在对内存中初始化,所以不可以;

4多态:双重性,只正对功能,不针对属性,通常是:编译看左边,运行看左边

前提:1有继承或者实现关系2有方法重写3有父类或者父接口引用指向子类对象

成员变量:子类的方法访问变量的查找顺序:
在子类方法的局部范围找,有就使用。
在子类的成员范围找,有就使用。
在父类的成员范围找,有就使用。
找不到,就报错。

构造方法:子类的构造方法默认会去访问父类的无参构造方法,是为了子类访问父类数据的初始化,父类如果没有无参构造,那么通过super指定父类中的哪一个

成员方法:在子类中找,有就使用,在父类中找,有就使用,找不到,就报错

好处:提高代码的扩展性,弊端:父不能使用子的特有功能

应用:向下转型:从父到子,因为内存中已经存在了子类对象了,现在是想将子类对象指向子类引用,在栈内存中是一个赋值的过程,所以我们要进行强转来获得;

5抽象类:对方法没有表述如何实现的类,用抽象类表示,常常用作模版涉及模式;修饰符:abstract

抽象类的特点

1抽象类和抽象方法必须用关键字abstract修饰
2抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
3抽象类不能实例化
4抽象类的子类
1是一个抽象类。
2是一个具体类。这个类必须重写抽象类中的所有抽象方法。

抽象类的成员特点:属性:有变量,有常量,方法可以有抽象,也可以有非抽象

6接口:     对类提供的一中扩展功能,可以多实现,修饰符:interface

特点:不能实例化,提供功能扩展,成员修饰符为:public static final,方法修饰符为:public abstract

使用:类必须实现接口:implements,多实现用,分隔开

7类与接口之间的关系:
1:类与类:继承关系,只能单继承,可以多层继承
2:类与接口:实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时,实现多个接口
3:接口与接口:继承关系,可以单继承,也可以多继承

4类与抽象类:继承关系

5抽象类与接口关系:实现关系

8static关键字:可以修饰成员变量和成员方法。用于给类初始化;

特点:1随着类的加载而加载,随着类的消失而消失2优先与对象存在3被类的所有对象共享4可以通过类名调用既可以通过对象名调用,也可以通过类名调用,建议通过类名调用。

存在原因:节省对内存,让所有对象共享

9对象初始化过程:

Student s = new Student():这句代码的初始化过程

1把Student.class文件加载到内存
2在栈内存为s开辟空间
3在堆内存为学生对象申请空间
4给学生的成员变量进行默认初始化。null,0
5给学生的成员变量进行显示初始化。林青霞,27
6通过构造方法给成员变量进行初始化。刘意,30
7对象构造完毕,把地址赋值给s变量

10代码演示:

封装,继承:

class Student  extends  Person implements Work{
private String name;
private int age;

public Student(){}

// 重写了person的方法

@Override

public  void show(){

syso("我是一个学生")

}

//
重写了Work接口的方法

@Override

public  void work(){

syso("学生的工作是上课,学习");}

public Student(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

public static void main(String[] args) {

//多态

Person p=new Student();

p.show();

//调用接口的方法

p.work();就会报错,因为person没有实现这个接口

}

接口:因为接口编译之后也是一个.class文件,所以接口也可嵌套接口,但必须是静态的

public interface MyInterface {
// 接口嵌套
public static interface Work {
};
//嵌套抽象类
public static abstract class Demo{}

}

总结:

1面向对象是一个思想,比较抽象,但是代码实现起来容易,但是理解稍稍空难,在后续的开发中多态非常常用,看到了好多的都是接口的作用

2类和接口是like-a关系,又由于接口是一个.clss文件,所以内部类可以事项接口中的接口,或者接口中的抽象类

3最难的就是抽象的过程,分析事物的属性,定义事物的功能,该如何定义,看书上有,谁拥有数据,谁就是对象,所以,关于抽象方面,还是练习不够;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: