面向对象 总结笔记

JAVA学习网 2020-02-26 15:25:04

1.面向对象

面向对象的特点:封装、继承、多态、抽象

  • 封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。封装是一种信息隐藏技术,在java中通过关键字private,protected和public实现封装。 适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。

  • 继承:继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

  • 多态:多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作
    抽象

温馨提示:对象与实例是同一个概念,创建一个对象就是创建一个实例。程序员最不缺的就是对象,想要自己就new一个呗。

2.类

public class A {
    //成员属性
    private String name;
    private int age;
    
    //构造方法,一般用于对象的初始化
    A(String name,int age)
    {
        super();//这个super是默认隐藏的,继承父类的构造方法。
                this.name=name;
                this.age=age;
    }
    
    //toString方法,默认返回哈希值
     public String toString() 
     {

            return getClass().getName() + "@" + Integer.toHexString(hashCode());

     }
     
     //equals方法,判断内存地址是否相等
     public boolean equals(Object obj) 
     {
            return (this == obj);
     }

          public String getName() {//获取名字的接口
        return name;
    }

    public void setName(String name) {//设计名字的接口
        this.name = name;
    }

    public int getAge() {//获取年龄的接口
        return age;
    }

    public void setAge(int age) {//设置年龄的接口
        this.age = age;
    }    
}

注意:

  • 类由成员数据(属性)和方法两部分构成,一般用private修饰成员数据用于保护隐私,通过设置get和set方法给用户提供访问的接口,以此来提高安全性。
  • 构造方法继承自父类,一般可以通过改写构造方法给一个对象进行初始化
  • toString、equals方法都继承自Object类,new一个对象就默认继承了这些方法,可以改写它们实现更多功能。

3.访问控制修饰符

修饰符 同类 同包 子类 外部包
public
protected
default
private

4.其它修饰符

  • static:静态变量;静态方法;修饰后成为共享数据。
  • final: 常量;固定方法;修饰后相当于上锁,不可修改!
  • transient: 修饰非静态变量,
  • volatile: 修饰非静态变量,
  • abstract: 抽象方法;
  • synchronized: 只能修饰方法;

5.this与super

  • this与super的使用能避免歧义,方便理解代码;
  • 读代码时this完全可以替换成本类的类名,super完全可以替换成父类类名!
class Fu{
    String name;
    int age;
    Fu()
    {
        this.say();//相当于Fu.say();
    }
    public void say()
    {
        System.out.println("我是小头爸爸");
    }
}
class Son extends Fu{
    Son(){
        super();//相当于Fu();
    }
    Son(String name,int age){
        this();//相当于Son();
        this.say();//相当于Son.say();
        this.name=name;//相当于Son.name=name;
        this.age=age;//相当于Son.age=age;
    }
    
    public void say()
    {
        System.out.println("我是大头儿子");
    }
}


public class A {
    public static void main(String[] args)
    {
        new Fu();
        new Son("大头儿子",6);
    }
}

运行结果:

我是小头爸爸
我是大头儿子
我是大头儿子

注意:

  • this()是调用本类的构造函数,super()是调用父类的构造函数
  • 子类永远都不会执行父类方法,执行的是从父类继承或重写的方法。
阅读(3579) 评论(0)