面向对象OOP 通常说的oop其实是面向对象的程序设计 Object Oriented Programming
基本思想:万物皆对象 认识类与对象
类(Class):类是具备某些共同特征的实体的集合,它是一种抽象的概念,用程序设计的语言来说,类是一种抽象的数据类型,它是对所具有相同特征实体的抽象。
对象(Object):类的实例,每个对象都具有属性和方法这两方面的特征。对象的属性描述了对象的状态和特征,对象的方法说明了对象的行为和功能,并且对象的属性值只应由这个对象的方法来读取和修改,两者结合在一起就构成了对象的完整描述。
二者关系:类是对象的集合,对象是类的实例
面向对象三大特性 封装Encapsulation 继承Inheritance 多态Polymorphism
封装Encapsulation 一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。
(1)、修改属性可间性(private仅内部可见) (2)、设置setter / getter 方法,即赋值和取值 (3)、设置属性的存取限制
静态代理模式staticProxy体现了封装的思想
public interface PersonRun {
public void run();
}
public class KGCinstall implements PersonRun{
public void run() {
System.out.println("我跑了很大一圈400米");
}
}
静态代理的演示 public class StaticProxy implements PersonRun{
private PersonRun pr = new KGCinstall();
public void run() {
pr.run();//逻辑判断 什么时候才会执行KGCinstall类的run方法
}
}
public class Test {
public static void main(String[] args) {
PersonRun pr = new StaticProxy();//在调用的话调用的是
pr.run();
}
}
继承Inheritance java中使用extends关键字来表示继承关系。当创建一个类时,如果没有明确指出要继承的类,就总是隐式地继承Object,也就是说Object是所有类的父类。
比如下面这段代码: class Person {
class Man extends Person {
public Person() { }
public Man() {}
}
}
类Man继承于Person类,这样一来的话,Person类称为父类(基类),Man类称为子类。 如果两个类存在继承关系,则子类会自动继承父类的方法和变量,在子类中可以调用父类的方法和变量。
java中,只允许单继承,也就是说 一个类最多只能显示地继承于一个父类。但是一个类却可以被多个类继承,也就是说一个类可以拥有多个子类。
1、子类继承父类的成员变量和成员方法 当子类继承了某个类之后,便可以使用父类中的成员变量和方法,但是并不是完全继承父类的所有成员变量和方法。
具体的原则如下:
(1)能够继承父类的public和protected修饰的成员变量和方法;不能够继承父类的private成员变量和方法;
(2)对于父类的包访问权限成员变量和方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
(3)如果子类中出现了同名的成员方法或是成员变量,子类的成员变量和方法会覆盖掉父类同名的成员方法或变量,要是想访问,需用super关键字调用
2、构造器 子类是不能够继承父类的构造器,但是要注意的是,
(1)如果父类的构造器都是带有参数的,则必须在子类的构造器中显示地通过super关键字调用父类的构造器并配以适当的参数列表。
(2)如果父类有无参构造器,则在子类的构造器中用super关键字调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。
多态Polymorphism 一般分为两种:重载式多态overload和重写式多态override
(1)重载式多态,也叫编译时多态。也就是说这种多态再编译时已经确定好了。我们知道方法名相同而参数列表不同的一组方法就是重载。在调用这种重载的方法时,通过传入不同的参数最后得到不同的结果。
(2)重写式多态,也叫运行时多态。这种多态通过动态绑定(dynamic binding)技术来实现,是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。 重写式多态override 同一个行为具有多个不同表现形式或形态的能力。
多态存在的条件
(1)继承。在多态中必须存在有继承关系的子类和父类。
(2)重写。子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
(3)向上转型。在多态中需要将子类的引用指向父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。 在子类中重写的方法,可以通过“父类引用指向子类对象”来调用。而子类独有的方法只能通过创建子类对象来调用。