面向对象(OOP)

什么是面向对象

Java的编程语言是面向对象的,采用这种语言进行编程称为面向对象编程(Object-Oriented Programming, OOP)。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象,(万物皆对象)。

面向对象的三大特征:封装,继承,多态。

封装(Encapsulation)

封装是面向对象的特征之一。核心思想就是“隐藏细节”、“数据安全”,将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定。所有的内容对外部不可见。

通常,禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。 信息隐藏是用户对封装性的认识,封装则为信息隐藏提供支持。

继承(inheritance)

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

java中使用继承需要使用extends关键字。

派生类(子类)可以从它的基类(父类)那里继承方法和实例变量,并且派生类(子类)中可以修改或增 加新的方法使之更适合特殊的需要继承性很好的解决了软件的可重用性问题。

继承的好处:

1.提高类代码的复用性

2. 提高了代码的维护性

3.使得类和类产生了关系,是多态的前提

this与spuer

super注意点:

        1.调用父类的构造方法,必须在构造器中的第一行

        2.必须出现在子类的方法或者构造器中

        3.super和this不能同时调用构造方法

this:

this与super区别:

       代表的类不同:

                this 本身调用者这个对象

                super 代表的是父类对象的应用

        构造方法:

                this()  本类的构造方法

                super()  父类的构造

        其他:

                this  表示当前对象。

                super  不能表示当前对象

         变量:

                this  变量 调用的当前对象的变量;

                super  变量 直接调用的是父类中的变量。

        参数:

                this  调用(转发)的是当前类中的构造器;

                super  用于确认要使用父类中的哪一个构造器。

方法重写:

需要有继承关系,子类重写父类的方法

  1. 子类与父类方法名相同。
  2. 方法参数相同
  3. 修饰符 范围可以扩大 public -> protected -> default -> private
  4. 抛出异常:范围可以缩小但是不可以扩大 

方法重载:

  1. 发生在同一个类中
  2. 方法名相同
  3. 方法中的参数不同(参数个数,参数顺序,参数类型)

注意:

       方法重载和返回值类型无关

        方法重载和修饰符列表无关

多态(polymorphism)

多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。

什么是多态

生活中多态
同一个操作,由于条件不同,产生的结果不同。
程序中多态
同一个方法,不同的对象可以做出不同响应。
同一引用类型,使用不同实例(对象)而执行不同操作。

多态实现三要素

  1. 重写
  2.  父类的引用指向子类的对象
  3. 有继承关系

static与final

什么是static

静态变量对于类而言在内存中只有一个,能被类的所有实例所共享。实例变量对于类的每个实例都有一份, 它们之间互不影响.

static变量

在类中,使用static修饰的成员变量,就是静态变量,反之为非静态变量。静态变量属于类的,"可以"使用类名来访问,非静态变量是属于对象的,"必须"使用对象来访问。

public class Student{
    private static int age;
    private double score;
    public static void main(String[] args) {
        Student s = new Student();
        //推荐使用类名访问静态成员
        System.out.println(Student.age);
        System.out.println(s.age);
        System.out.println(s.score);
    }
}

static方法

与在类中,使用static修饰的成员方法,就是静态方法,反之为非静态方法。

静态方法数属于类的,"可以"使用类名来调用,非静态方法是属于对象的,"必须"使用对象来调用。

静态方法"不可以"直接访问类中的非静态变量和非静态方法,但是"可以"直接访问类中的静态变量和静态 方法。this和super在类中属于非静态的变量.(静态方法中不能使用)

public class Student{
    private static int count;
    private int num;
    public void run(){
    
    }
    public static void go(){

    }
    public static void test(){
        //编译通过
        System.out.println(count);
        go();
        //编译报错
        System.out.println(num);
        run();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值