掌握这些面向对象的核心技术,包你面试无忧!

112 篇文章 0 订阅
85 篇文章 2 订阅

面向对象简介

面向对象是相对于面向过程来说的,面向过程是一种以“过程”为中心的编程思想,分析出解决问题所需的步骤,然后用函数把这些步骤一步步的实现,使用的时候一个个依次调用就好。而面向对象,是一种以“对象”为中心的编程思想,把问题看成一个个对象,通过对象的属性和行为,将问题解决的。面向过程强调的是模块化,而面向对象强调的是把事物对象化。

复杂来说面向对象是以“对象”为基本单元构建系统,对象是把数据和数据操作方法放在一起,作为一个相互依存的整体。把同类的对象抽象出其共性,形成类。所以说类是对象的抽象,对象是类具体化的体现(类是大范围的,一个类可以有多个对象),类中的大多数数据只能通过本类的方法实现,类包含说明和实现,说明部分被外界所看到,通过简单的外部接口与外界进行联系;实现部分不被外界所看到,在内部通过不同方法的构建,实现不同的功能。对象与对象之间通过消息进行沟通,程序流程由用户在使用中决定。

面向对象用以解决越来越复杂的需求,提高了软件的重用性,灵活性和拓展性。

开始之前,记得点赞收藏加关注哦 ,需要下载PDF版本和更多知识点、面试题的朋友可以点一点下方链接免费领取

链接:点这里!!! 799215493 暗号:CSDN

在这里插入图片描述

static关键字

static表示“静态”的意思,可以用来修饰成员变量和成员方法。 static的主要作用在于创建独立于具体对象的域变量或者方法 简单理解: 被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问, 并且不会因为对象的多次创建而在内存中建立多份数据。

静态成员 在类加载时加载并初始化。

无论一个类存在多少个对象 , 静态的属性, 永远在内存中只有一份( 可以理解为所有对象公用 )
在访问时: 静态不能访问非静态 , 非静态可以访问静态 !

静态方法调用的三种方式:

  1. new xx().静态(); //使用对象调用,不推荐
  2. xx.静态(); //类名调用,正规调用方法,推荐
  3. 静态(); //本类的静态方法在本类调用,直接调用

注意事项:

  • 在同包不同类调用的时候,可以直接 类名.方法() 调用,无需创建对象。
  • 在不同包调用的时候,需要引包再调用。

代码示例:

package com.vedio.highobject;

public class Pool {
    public static int water=0;//静态变量

    public static void outlet() {//放水
        if(water>=2) {
            water=water-2;
        }else {
            water=0;
        }
    }

    public static void inlet() {//进水
        water=water+3;
    }

    public static void main(String[] args) {
        System.out.println("水池的水量:"+water);
        System.out.println("水池注水两次。");
        Pool.inlet();
        Pool.inlet();
        System.out.println("水池的水量:"+water);
        System.out.println("水池放水一次。");
        Pool.outlet();
        System.out.println("水池的水量:"+water);
    }
}


注意:在类中调用静态方法和静态方法时,需要使用类名.变量名或类名.方法名调用,在本类中调用静态方法和静态方法时,可以不加类名。

instanceof关键字

只有存在继承关系,才能使用instanceof关键字,否则会报错

代码示例:

//只有存在继承关系,才能使用instanceof关键字,否则会报错
public class Computer {//电脑类
    public static void main(String[] args) {
        Pad ipad=new Pad();
        LenovoPad lenovoPad=new LenovoPad();
        System.out.println("Pad是否继承自电脑?"+(ipad instanceof Computer));
        System.out.println("LenovoPad是否继承自Pad?"+(lenovoPad instanceof Pad));
        System.out.println("Pad是否继承自LenovoPad?"+(ipad instanceof LenovoPad));
       // System.out.println("Pad是否继承自人类?"+(ipad instanceof Person));//ipad与Person这个类没有任何的继承关系
    }
}

class Pad extends Computer{//平板电脑
}
class LenovoPad extends Pad{//联想平板电脑
}

public class Person {
    public Person(String name){
        System.out.println("您好,我叫"+name);
    }
}


ipad和Person两个类没有任何继承关系,所以使用instanceof时,会直接报错。

euqals()方法

查看equals()源码,如下

public boolean equals(Object obj) {
        return (this == obj);
    }


所以在object类中equals方法只能用来比较地址是否一样,与==作用一样。但当我们可以自己重写equals方法,使之满足我们的需求。

比如我们定义一个Person类,只有id和name都一样时,才确定他们是同一个人。代码示例:

package com.vedio.highobject;

public class Person {
    String name;
    String id;

    public boolean equals(Person p) {
        return this.name.equals(p.name)&&this.id.equals(p.id);
    }
}


package com.vedio.highobject;

public class Demo1 {
    public static void main(String[] args) {
       Person p1=new Person();
       Person p2=new Person();
       Person p3=new Person();

       p1.name="小明";
       p1.id="123";

       p2.name="小红";
       p2.id="123";

       p3.name="小明";
       p3.id="123";

       System.out.println(p1.equals(p2));
       System.out.println(p1.equals(p3));
       System.out.println(p2.equals(p3));
    }
}


可以观察到,只有id和name完全一样是,才为true。通过重写equals方法,满足了我们的需求。

equals与==的区别

String可以使用equals比较地址是因为它重写了equals方法 查看String对equals方法的重写源码,如下:

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }


equals是判断两个变量或者实例指向同一个内存空间的值是不是相同,而==是判断两个变量或者实例是不是指向同一个内存空间, 举个通俗的例子来说,==是判断两个人是不是住在同一个地址,而equals是判断同一个地址里住的人是不是同一个 代码示例:

package com.vedio.highobject;

public class Demo2 {
    public static void main(String[] args) {
        String s1=new String("123");
        String s2=new String("123");
        System.out.println(s1.equals(s2));
        System.out.println(s1==s2);
        String s3="123";
        String s4="123";
        System.out.println(s3.equals(s4));
        System.out.println(s3.equals(s1));

    }
}


toString()方法

package com.object.high;

//所有类的父类 --Object类
//在Java中,所有的类都直接或间接继承了java.lang.Object类
//由于所有的类都是Object类的子类,所以任何类都可以重写Object类中的方法

public class Hello {

    //重写toString()方法
    public String toString(){
        return "Say \""+getClass().getName()+"\" to Java";//getClass().getName()获取类的名称
    }

    public static void main(String[] args) {
        System.out.println(new Hello());//当打印某个类对象时,将自动调用重写的toString()方法
    }
}


最后

在这里为大家整理了各个知识点模块整理文档(微服务、数据库、mysql、jvm、Redis等都有)和更多大厂面试真题,有需要的朋友可以点一点下方链接免费领取

链接:点这里!!! 799215493 暗号:CSDN

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值