面向对象特征

来源:互联网 发布:中超球员数据统计 编辑:程序博客网 时间:2024/06/14 03:26
面向对象三大特征:继承、封装、多态。




重写:发生在父类和子类之间。(继承即为遗传、重写即为变异) 子类的方法名和父类相同,参数列表相同,返回类型也相同。当对子类对象进行方法调用时,会优先调用子类重写的方法。

子类对象创建前,先产生父类对象(默认执行 super (); )。然后在父类对象基础之上,扩展子类特有的属性和方法。所以子类对象中包含完整的父类对象,就可以重用父类中定义的方法和属性。
子类重写父类的方法,要求子类方法访问修饰符大于或等于父类方法修饰符。



super();     父类无参数列表,则默认执行super();   
                有参数列表则需要添加super(参数); 作传参处理

final:可以修饰类,方法,变量。
方法被修饰为final,表示该方法不能被重写。
引用类型的变量被修饰为final,表示该变量的值不能改变,即不能指向别的对象。
类被修饰为final ,表示该类不能被继承(太监类)。




访问修饰符(被访问范围由大到小):
public   该类或非该类均可访问
protected   该类及其子类的成员可以访问,同一包中的类也可以访问
默认    相同数据包中的类可以访问
private  只有本类可以访问


private成员
缺省成员
protected成员
public成员
同一类中
同一包中的其他类
不同包中的子类
该类及非该类均可访问



封装:
按照信息隐藏原则,将数据隐藏在一起。
特点:信息隐藏、信息集合。

私有属性+get/set方法和公有属性的区别:
1、私有属性不能被直接访问,只能通过公有的get方法(访问器)和set方法(修改器)来进行设值和取值。这样一旦删掉get或set方法,可以将该属性做成只读或只写属性。公有属性无法做到。
2、可以通过修改器在设置属性时,做到数据合法性的验证。公有属性无法做到。


static{

}
称为静态初始化块。在类加载时执行,也就是在对象之前执行。而且只执行一次。



内部类:
在一个类中,再定义一个类,称为内部类。内部类相当于外部类的属性,内部类对象的产生必须依赖于外部类对象。
内部类所产生的class文件格式:外部类类名$内部类类名.class



多态:
允许一个父类变量引用子类的对象,允许一个接口类型变量引用实现类对象。反之不允许。
多态调用时,使用父类变量指向子类对象,只能调用父类中定义的方法或属性,不能调用子类特有的方法或属性。如果子类重写了父类的方法,那么调用时,会优先调用子类重写的方法。

如果一个类中,只有方法定义,没有方法具体实现,那么该方法称为抽象方法。而拥有抽象方法的类叫做抽象类,用关键字abstract定义。抽象类不能直接实例化,如果要实例化抽象类,那么抽象类变量需要指向子类对象。

抽象类中 ,可以定义抽象方法,也可以定义具体方法。如果一个类继承抽象类,那么必须重写抽象类中定义的所有抽象方法。

抽象方法定义的意义在于使用父类变量指向子类对象时,可以对抽象方法进行调用。



总结:
1、使用父类类型的引用指向子类的对象。
2、该引用只能调用父类中定义的方法,不能调用子类中独有的方法。
3、如果子类中重写了父类中的方法,那么在调用该方法时,将会优先调用子类中的这个方法。
4、在多态中,子类可以调用父类中所以方法。
5、多态主要体现为重载和重写,相同的行为不同的实现方式。
6、多态主要应用为多态参数和多态集合。
7、如果一个方法中有父类作为参数类型,就意味着可以给该方法传递任何一个子类对象。



instanceof:     a instanceof Dog   表示a变量指向的对象 是否指向Dog类型。(两者是否匹配,返回boolean类型)



接口:类和类抽象出属性和行为则为父类,只抽象出行为便是接口。

接口可以是一种行为的抽象。接口可以看做是抽象类的特例。抽象类中可以有抽象方法、具体方法。但是接口中只能有抽象方法。定义接口用 interface  ,实现接口用 implements 。

接口中定义的方法都是抽象方法,修饰符为 public abstract。即使缺省,也是公共的抽象方法。

如果一个方法参数为接口类型,意味着可以传递该接口的任何实现对象。

接口中可以定义变量,其修饰符是public static final  ——> 是公共的静态的常量。

接口可以继承接口。同时可以多继承接口。 一个类要实现一个接口,不但要实现该接口中定义的抽象方法,而且要实现该接口父接口中定义的抽象方法。



抽象类和接口的区别:
1、都不能直接实例化
2、抽象类中可以有抽象方法,也可以有具体方法。但是接口中只能有抽象方法。
3、抽象类中定义的变量是普通属性。但接口中定义的变量是公共的静态的常量
4、一个类只能继承一个抽象类,但可以实现多个接口。
5、一个类实现一个接口,可以不完成实现接口中定义的抽象方法,但这个类只能是抽象类。同样,一个类继承一个抽象类,也可以不实现抽象类中定义的抽象方法,这个类也需是抽象类。

一个类继承一个父类,由于子类对象包含一个完整的父类对象,所以可以继承父类中所有的方法和属性,包括私有方法和私有属性。但是私有方法和私有属性不能被子类直接访问,可以通过父类公有方法进行访问。

如果一个方法申明为private,那么该方法默认修饰符为final。也就是该方法不能被子类重写。

一个方法的参数如果是父类类型,表示调用该方法时,可以传递任何一个子类对象。一个方法的参数如果是接口类型,表示调用该方法时,可以传递任何实现类对象。


OO:面向对象
OOP:面向对象编程
OOA:面向对象分析
OOD:面向对象设计



package com.lovo.overTest;

public class Student {
    public String name;
    public int age;
    public String sex;
    public Student(String name,int age,String sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public String toString(){
        return this.name+"  "+this.age+"  "+this.sex;
    }
    @Override
    public boolean equals(Object obj){
        Student s = (Student)obj;
        return this.age == s.age&&this.name == s.name;  //重写equals方法

    }
}


package com.lovo.overTest;
public class Mytest {
    public static void main(String[] args) {
        Student s1 = new Student("张三",20,"男");
        Student s2 = new Student("张三",20,"女");
        System.out.println(s1==s2); //地址不等
        System.out.println(s1.equals(s2)); //重写了equals方法,取出两者的年龄进行比较
        String s = new String("dd");
        String s3 = new String("dd");
        System.out.println(s.equals(s3)); //重写了String方法

    }

}
0 0
原创粉丝点击