java面向对象三大特性

来源:互联网 发布:印象笔记 圈点 mac 编辑:程序博客网 时间:2024/06/05 03:55

封装(Encapsulation)

  • 理解:将属性和方法提取到类中,接着通过权限修饰符限制某些方法的访问权限(相当于一个保护屏障)
  • 好处:减少耦合,隐藏信息
  • `public class Student{
    private String name;
    private int age;
    public int getAge(){
    return age;
    }
    public String getName(){
    return name;
    }
    public void setAge(int age){
    this.age = age;
    }
    public void setName(String name){
    this.name = name;
    }
    }
  • 将属性或方法定义为private只能在本类中访问,可以达到隐藏信息,对外不可见,如果外部类需要访问只能通过get,set方法来访问
class Text{    Studet s=new Student();    s.setName("bb");    s.setAge(20);    System.out.println("姓名:"+s.getName()+",年龄:"+s.getAge());}

结果为:姓名:bb,年龄:20

继承(Extends)

  • 继承:子类继承自父类,具有了父类的属性和方法,并且还有自己特殊的方法
class Animal{    private String name;    void shout(){    }    public void getName(String name){        this.name=name;    }    public void setName(){        return name;    }}

父类Animal提取了子类相似的方法而构成

class Cat extends Animal{    void shout(){        Ststem.out.println(name+"喵喵叫");    }}class Dog extends Animal{    void shout(){        Ststem.out.println(name+"汪汪叫");    }}

Java中允许单继承,不允许多继承(区别与C++),能够多重继承,Java中通过多实现来完成(接口)
* 单继承:一个子类只能有一个直接父类
* 多继承:一个父类有多个子类
* 多重继承:A extends B,B extends C(c是基类,定义了最基本的功能)

class Car{}class Bus extends Car{}class SandanCar extends Car{}
  • 好处:减少了代码的重复,增强了代码的可扩展性,便于维护
  • 比较:
  • this:用于局部变量和成员变量同名时;
  • super:用于子类变量和父类变量重名时;
  • this();构造方法中对父类对象的引用
  • super();构造方法中对当前对象的引用

`

public class P1 {    public P1(){    show();    }    public void show(){        System.out.println("P1 show");    }}public class C1 extends P1 {    int num=10;    {    System.out.println("num-====>"+num);    }    public C1(){        System.out.println("sadasd-===>"+num);    }    @Override    public void show() {        System.out.println("C1 show----->"+num);    }}

当子类重写了父类的方法时,优先调用子类的方法,子类找不到再调用父类的
调用子类中的构造方法时一定先调用父类的初始化方法在调用子类的初始化方法

  • 重载/覆盖(overload):同一类中(方法名加参数列表不同)
  • 重写(override):子类方法和父类方法签名一致(修饰符(子类权限小于父类)+返回值类型+方法名+参数列表)
  • 重写与重载只针对于方法
  • 就近原则只针对于属性(成员变量,局部变量)

Final

  • final修饰的变量是常量(只能显示初始化),而且修饰变量需大写
  • final修饰的类不能被继承
  • final修饰的方法不能被重写

多态

  • 一种事物多种形态
  • 多态存在的三个必要条件:1.继承2.重写3.父类引用指向子类对象
Person p=new Student();//person是父类,student是子类
  • 俩个注意:1.运行时(看右边):找具体的实现类
  • 2.编译时(看左边):