java面向对象的三大特性

来源:互联网 发布:microsoft visio mac 编辑:程序博客网 时间:2024/06/07 00:27

封装

封装是指不对外表示对象的属性是什么,有哪些方法,这样也表示了java是面向对象编程,而不是面向过程的
->封装是对对象的属性和方法的封装利用关键字private

1.对属性的封装
当对一个对象的属性进行封装时,只有对外提供getXxx(),和setXxx()方法时,外部才可以对对象进行赋值和取值

public class Person {    private String name;    private String id;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }}

2.对方法的封装
->对构造方法的封装
封装构造方法时无法通过new Xxx()方法来创建对象
这时候通过提供一个方法来获得此对象

public class Person {private static final Person p=new Person();private Person(){}   public static Person getPerson(){    return p;     } }

->对成员方法的封装
表示不对外提供具体实现细节

继承

通过提取事物的共同特性(属性和功能)到一个超类(父类)中,被继承的类通过关键字extends 可以使用父类非private修饰的属性和方法,叫继承
>1
继承时子类不仅可以有父类中的方法和属性还有特有的属性和方法
>2
类与类的继承有单继承和多层继承,接口和接口可以有单继承和多继承
>3
父类的构造器是无法继承的,可以调用父类的构造器;在子类进行实例化的时候,先对父类的数据进行初始化(静态代码块>构造代码块>构造方法)

**>4**  继承是“is  a”的关系**>5**继承时子类的权限修饰符要比父类的权限修饰符大

多态

Java实现多态有三个必要条件:继承、重写、向上转型
指父类对象的引用指向子类对象
或者抽象类的引用指向抽象类的实现类

public class Animol {}public class Cat extends Animol {}public class Dog extends Animol {}public class Test {public static void main(String[] args) {    Animol a=new Dog();//向上转型            //Cat c=(Cat)a;//编译看左边向下转型,运行看右边错了        Cat c=new Dog();    Animol dog=new Cat();    //Dog d=(Dog) dog;    Dog d2=new Dog();    //Cat c2=(Cat)d2;这里编译的时候就错了    if(dog instanceof Dog){        Dog d3=(Dog) dog;    }}

}

在这种情况下
父类对象的引用调用方法的时候因为有重写因此编译看左边运行看右边
编译时候看A中是否有被调用的方法
运行的时候看B中的结果

如果父类和子类中有一样的静态的方法
这时候编译和运行都看左边
因为静态是随着类的加载而存在
在类存中先加载静态后在堆类存中为new B()划分空间
静态方法的调用可以通过 类名.方法名调用

A
int s=5
B
int s=9
因为变量没有重写
编译和运行都看左边