面向对象

一、类和对象

1.类:构造对象的蓝图或模板(抽象)

由类构造对象的过程叫做类的实例。

类与类之间的关系:
1.1依赖(uses-a):一个类的方法操作另一个类的对象,应尽可能将相互依赖的类减至最少,
1.2.聚合(has-a):意味着一个类的对象包含另一个类的对象。
1.3继承(is-a):子类继承父类的方法和实例域。

2.对象:类的具体实现(客观)

1.2.2构造方法:没有返回值,方法名称与类的名称相同(实例化对象,初始化数据)

更改器方法:修改对象状态的方法(setxxx())
访问器方法:访问对象而不修改对象的方法(getxxx())

二、重载和重写

1.重载(Override):多个同名函数同时存在,具有不同的参数类型/个数。

方法名相同,参数不同。(要完整的描述一个方法,需要指出方法名和参数类型。这种叫做方法
的签名。返回类型不是方法签名的一部分,因此不能有两个名字相同,参数类型相同,返回类型却不同
的方法。)

2.重写(Overload):子类可以继承父类中的方法,而不需要重新编写相同的方法。(又称覆盖)

方法名相同,返回值相同,修饰符大于等于父类,异常小于父类(两同一大一小)

三、继承、封装、多态

1.继承:  继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

this的用途:一是引用隐式参数,二是调用该类的其他构造器。
super的用途:一是调用超类的方法,二是调用超累类的其他构造器。

2.封装:封装(encapsulation)是计算机常见的术语,即保留有限的外部接口(interface),隐藏具体实施细节。用户处在封装的外部,只能通过接口,进行所需的操作。

2.1java访问权限修饰符

3.多态:不同类的对象对同一消息做出不同反应,同一消息可以根据发送对象的不同而采用多种的不同行为方式。(发送消息就是函数调用)

多态的必要条件:1.继承 2.重写3.父类引用指向子类对象。

4.final关键字:由final定义的变量为常量,只能在定义时被赋值。由final修饰的方法不能被重写。由fianl修饰的类不能被继承。

四、抽象类、抽象方法、接口(模板模式)(只能被继承)

1.抽象类:

         1)、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。

         2)、抽象方法必须由子类来进行重写。

         3)、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。

         4)、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。

         5)、子类中的抽象方法不能与父类的抽象方法同名。

         6)、abstract不能与final并列修饰同一个类。

         7)、abstract 不能与private、static、final或native并列修饰同一个方法。

        8)、抽象类可以包含属性,方法,构造方法,但构造方法不能用new来实例,只能被子类调用。

2.抽象方法:

只有方法的声明,没有方法体

抽象方法只能被子类继承

3.接口(只有常量和抽象方法(JDK8以前)):

接口是抽象类的延伸,可以将它看做是纯粹的抽象类,接口中的所有方法都没有方法体。

         1)、Interface的方所有法访问权限自动被声明为public。

         2)、接口中可以定义“成员变量”,或者说是不可变的常量,因为接口中的“成员变量”会自动变为为public static final。

         3)、接口中不存在实现的方法。

         4)、实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。

         5)、不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。

         6)、在实现多接口的时候一定要避免方法名的重复。

        JDK8接口中可以定义静态方法以及默认(default)方法.

要实现接口必须实现接口类的所有方法。

接口中定义的任何字段都自动是static和final。

匿名类:不能有名字的类,不能被使用,只有在被创造时用new语句来声明

目的:在某个地方需要特殊的实现,形式:new<类或接口><类的主体>

    public class Client {  
      
        public static void main(String[] args) throws InterruptedException {  
            Thread t=new Thread(new Runnable() {  
                  
                @Override  
                public void run() {  
                    System.out.println("hello,dusk!");  
                      
                }  
            });  
            t.start();  
        }  
      
    }  

  注意:

      1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
      2、匿名内部类中是不能定义构造函数的。
      3、匿名内部类中不能存在任何的静态成员变量和静态方法。
      4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
      5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

 
原文地址:https://www.cnblogs.com/ming-long/p/9210595.html