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

面向对象简介

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

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

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

开始之前,记得点赞收藏加关注哦 ,需要下载PDF版本和更多知识点、面试题的朋友

可以加q群:799215493   备注:简书   免费领取~

static关键字

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

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

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

在访问时: 静态不能访问非静态 , 非静态可以访问静态 !

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

new xx().静态(); //使用对象调用,不推荐

xx.静态(); //类名调用,正规调用方法,推荐

静态(); //本类的静态方法在本类调用,直接调用

注意事项:

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

在不同包调用的时候,需要引包再调用。

代码示例:

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等都有)和更多大厂面试真题,有需要的朋友

可以加q群:799215493   备注:简书   免费领取~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352