------- 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最难的就是抽象的过程,分析事物的属性,定义事物的功能,该如何定义,看书上有,谁拥有数据,谁就是对象,所以,关于抽象方面,还是练习不够;