面向对象进阶(一)

面向对象进阶(一)

1 继承

  • 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
  • 此处的多个类称为子类(派生类),单独的这个类称为父类(基类或超类)。可以理解为:“子类 is a 父
    类”
  • 子类继承了父类,就继承了父类的方法和属性
  • 在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。
  • 在Java 中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”。
  • 子类不能直接访问父类中私有的(private)的成员变量和方法。
  • Java只支持单继承和多层继承,不允许多重继承
  • 类继承语法规则: class Subclass extends SuperClass{ }

2 重写

在子类中可以根据需要对从父类中继承来的方法进行改造, 也称为方法的重置、覆盖override/overwrite。在程序执行时,子类的方法将覆盖父类的方法。

  • 子类重写的方法必须和父类被重写的方法具有相同的方法名称、 参数列表
  • 子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型
  • 子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限,子类不能重写父类中声明为private权限的方法
  • 子类方法抛出的异常不能大于父类被重写方法的异常

3 修饰符

Java权限修饰符public、protected、(缺省)、private置于类的成员定义前,用来限定对象对该类
成员的访问权限。

  • 对于class的权限修饰只可以用public和default(缺省)。
  • public类可以在任意地方被访问。
  • default类只可以被同一个包内部的类访问。
    在这里插入图片描述

4 super关键字

super用于引用当前对象的父类(超类)的成员变量和方法。super关键字在子类中使用,用于访问从父类继承而来的方法和属性。
在这里插入图片描述

5 多态

多态性,是面向对象中最重要的概念, 在Java中的体现:对象的多态性:父类的引用指向子类的对象。

  • Java引用变量有两个类型: 编译时类型和运行时类型。
    编译时类型由声明该变量时使用的类型决定, 运行时类型由实际赋给该变量的对象决定。
  • 简称: 编译时, 看左边;运行时, 看右边。
    若编译时类型和运行时类型不一致, 就出现了对象的多态性。多态情况下, “看左边” : 看的是父类的引用(父类中不具备子类特有的方法);“看右边” : 看的是子类的对象(实际运行的是子类重写父类的方法)。

示例:

class Animal {
    void makeSound() {
        System.out.println("动物叫");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("狗叫");
    }
}

class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("猫喵");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();

        animal1.makeSound(); // 输出:狗叫
        animal2.makeSound(); // 输出:猫喵
    }
}

在上面的示例中,定义了Animal类和两个子类DogCat。在Main类的main方法中,我们创建了Dog和Cat的对象,然后通过Animal类型的引用变量animal1和animal2来引用这两个对象。通过编译时多态,编译器将根据引用变量的类型来确定调用哪个方法,在运行时,根据对象的实际类型来执行具体的方法。这就是运行时多态的体现。在运行时多态中,方法的调用取决于对象的实际类型,而不是引用变量的类型。

6 Object类

  • ==:比较内存地址
  • equals:比较内容,但是默认比较内存地址,String因为重写了equels,所以String比较内容,源码如下:
	public boolean equals(Object obj) {
        return (this == obj);
	}
  • 重写equals
	@Override
	public boolean equals(Object obj) {
    	return this.age == ((Bean) obj).age;
	}
  • toString():打印时,会打印toString()方法
  • 重写toString()方法,来自定义打印信息
	@Override
    public String toString() {
        return "Bean{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
  • getClass:得到方法区中的类信息对象

7 自动装箱和拆箱

  • 装箱:基本数据类型转换成包装类
Integer i1 = 100; 
int i = 123;
Integer i2 = new Integer(123);
Integer i3 = new Integer("456");
//基本数据类型int->对应的包装类->Integer
//float-> Float
  • 拆箱:包装类转换成基本数据类型
Integer i1 = new Integer(123);
int i2 = i1.intValue();//拆箱

Boolean b2 = new Boolean(false);
boolean b3 = b2.booleanValue(); //拆箱
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值