栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java面向对象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java面向对象

文章目录
  • 一、面向对象是什么?
  • 二、面向对象的三大特征
    • 1.封装
    • 2.继承
    • 3.多态
  • 三、面向对象的重点知识
    • 1.方法的重写
    • 2.四种修饰符权限
    • 3.super关键字
    • 4.包装类
  • 总结


一、面向对象是什么?

面向对象是将功能封装成对象,强调的是功能的对象。于此一起的面向过程强调的是功能的行为。

二、面向对象的三大特征 1.封装

面向对象的特征封装,我们在Java中把一个个复杂的方法写在方法中或者类中,让其暴露出简单的接口,对于用户使用更加友好,复用性更高。

public static int search(int[] nums, int target, int left, int right) {

        int mid = (left + right) / 2;
        int midVal = nums[mid];

        if (left > right) {
            return -1;
        }

        if (target > midVal) {
            return search(nums, target, mid + 1, right);
        } else if (target < midVal) {
            return search(nums, target, left, mid - 1);
        } else {
            return mid;
        }
        
    }

我们调用search()方法就可以用二分法查找数据,但我们不用去知道其中的复杂实现。

2.继承

面向对象的特征继承:就像我们儿子继承父亲一样,我们通过继承,可以让子类继承父类的大部分属性和方法(除去父类私有的),这样我们就可以大大提高代码的复用性,减少代码的冗余。并且一个类有且只能有一个父类,也就是单继承。
注意:当我们使用继承时最好把无参构造方法也主动写上去,这样在之后新建子类对象时就不容易报错。(因为子类所有的构造器,都会默认访问父类的空参构造器,如果没有就会编译出错)

代码如下(示例):

public class Shape {
    int height = 4;
    int width = 5;

    public Shape() {
    }

    public Shape(int height, int width) {
        this.height = height;
        this.width = width;
    }
}

public class Triangle extends Shape {

    public void area(){
        int areas;
        areas = height*width/2;
        System.out.println(areas);
    }

}
3.多态

面向对象的特征多态:多态指的是不同对象对同一方法做出不同的反应。我们把不同的子类都当作父类来看待,不看他们直接的差异,写出通用的代码,以此来应对需求的不断变化。多态的前提的继承和重写。

注意:当我们把子类声明为父类时,我们只能使用父类中声明的方法,子类特有的方法不能进行调用。(如果非要使用可以用instanceof进行判断,然后进行强制类型转换)

代码如下(示例):

public class Human {
    String name;
    int age;
    String sex;

    public Human(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public Human() {
    }
    public void eat(){
        System.out.println("人吃饭");
    }

    public void read(){
        System.out.println("人读书");
    }

}
public class Man extends Human{

    @Override
    public void eat() {
        System.out.println("男生吃饭");

    }

    @Override
    public void read() {
        System.out.println("男生读书");
    }
}
public class Woman extends Human{
    @Override
    public void eat() {
        System.out.println("女生吃饭");
    }

    @Override
    public void read() {
        System.out.println("女生读书");
    }
}

public class TestHuman {
    public static void main(String[] args) {
        Human human = new Human();
        Human man = new Man();
        Human woman = new Woman();

        human.eat();
        human.read();
        man.eat();
        man.read();
        woman.eat();
        woman.read();


    }
}

我们三个对象声明的都是human,调用的是同一个方法,当时执行的结果却各不相同,这就是多态。我们可以使用向上转型,也就是把子类声明为父类,当不能进行向下转型,不能把父类声明为子类。因为子类中有父类中没有的方法,如果我们转型成功的话,那么我们调用那些方法就会报错,因为父类中没有,相反向上转型就没有这个问题了。(也可以看成把大的范围转为小范围)


三、面向对象的重点知识 1.方法的重写
  • 1.方法的从写:就是子类继承父类时把父类的方法进行覆盖和重置,写上自己的方法,在调用是执行子类的方法。
  • 2.要求:方法的重写必须要和被重写的方法有相同的方法名称,参数列表,返回子类型。
  • 3.要求:重写后的方法的范围权限必须要比之前的相同或者更大。
  • 4.要求:重写后的方法的抛的异常范围也必须要比之前的相同或者更大。
    代码如下(示例):
package com.liu.test5;


public abstract class Animal {
    String type;
    int numLegs;

    public void eat(){
        System.out.println("吃东西");
    }

    public void walk(){
        System.out.println("走路");
    }


}

package com.liu.test5;



public class Spider extends Animal{

    @Override
    public void walk() {
        System.out.println("蜘蛛爬墙");
    }

    @Override
    public void eat() {
        System.out.println("蜘蛛吃东西");
    }

}

2.四种修饰符权限

对于class我们只能用public 或者default(不写)。一个class中可以有多个类,但只能有一个public类。private修饰的类,不能被继承,简称太监类。而且private修饰的方法和属性也不能被子类继承过去.

3.super关键字

如果我们在子类和父类中都有属性name,我们在子类中需要调用父类中的name时,我们就需要使用super关键字来指定父类中的属性,这样使我们可以更好的区分子类和父类的方法和属性。并且super代表的不是父类对象,而是父类内存空间的标识。

public class Father {
    String name;
    int age;

    public Father() {
    }

    public Father(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class Son extends Father{
    String name;
    int age;


    public Son() {
    }

    public Son(String name, int age) {
        this.name = name;
        this.age = age;
    }


    public void show(){
        System.out.println("父亲的名字="+super.name);
        System.out.println("父亲的年龄="+super.age);
    }

}
4.包装类

java有8种基本数据类型boolean,byte,short,int,long,char,float,double.对应的包装类型。基本数据类型包装成包装类的实例是装修,获得包装类的基本数据类型是拆箱。 Boolean,Byte,Short,Integer,Long,Character,Float,Double.包装类创建对象的方式跟其他类一样。包装类是为了使基本数据类型跟java的面向对象更加贴合,所以为其额外增加的。

包装类中的缓存机制

			 Integer num3 = 10;
        Integer num4 = 10;
        Integer num5 = new Integer(20);
        Integer num6 = new Integer(20);
        Integer num7 = 128;
        Integer num8 = 128;
        System.out.println((num3==num4) +"	"+ num3.equals(num4));
        System.out.println((num5==num6) +"	"+ num5.equals(num6));
        System.out.println((num7==num8) +"	"+ num7.equals(num8));

Integer静态内部类被加载时,会创建-128到127的Integer对象,同时创建一个数组来缓存这些对象。num3和num4小于127,所以创建的是同一个Integer缓存对象,所以用==的结果为true。num5和num6使用new关键字指向两个不同的对象,结果为false。num7和num8,他们的值超过了127,所以同样创建了两个不同的对象,结果为false。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了java的面向对象,而面向对象为我们提供了一种很好的编程思想。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/871886.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号