面向对象的三大特性:封装、继承、多态

一、封装

封装是面向对象的核心思想。是以类为载体,将对象的属性和行为封装起来,对外隐藏其实现细节。

封装保证了类内部数据结构的完整性,使得外部(使用该类的用户)不能轻易地直接操作此数据结构,只能执行该类的允许的公开的数据(一般指方法);从而避免外部操作对内部数据的影响,提高了程序的可维护性。

二、继承

继承主要使利用特点对象之间的共有特性,将这些共有特性抽象出来作为基类,让继承该基类的其他类都拥有该基类的特性,而不需要重复实现,同时还可以自定义各自的特有能力和属性。如:麻雀和雕都是鸟类,鸟类都有翅膀,并且可以飞。就可以将鸟类作为基类抽象出来,麻雀和雕都继承鸟类后,就继承了鸟类的翅膀属性(变量)和飞的能力(方法),同时麻雀可以自定义自己吃虫子的能力,而雕自定义自己吃肉的能力。继承原有的功能,增加自己新的功能,实现了拓展和复用。

Java中,继承使用 extends 关键字来实现,其中Java规定了java.lang.Object 类作为所有的类直接或间接的父类(当类没有继承其他类时,java默认继承Object类,当类继承了其他类时,可以向上追溯,最终继承的类就是Object类)。java规定类只能继承一个类,但是一个类可以被多个类继承(一个子类只能有一个直接父类,一个父类可以有多个子类),类之间可以有多层的继承关系,直接继承的是直接父类,父类的父类就是间接父类,而最上层就是Object。

注:

1、extends:单一继承,可以让一个类继承一个父类

2、super:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。

3、this:指向自己的引用。引用自身的属性和方法。

4、final:当用final修饰类时,是把类定义为不能继承的,即最终类;
用于修饰方法时,该方法不能被子类重写;
用于修饰属性时,该属性不可被二次赋值。

三、多态

1.类的多态:

将父类对象应用于子类的特征就是多态。

如上述鸟类的例子,将子类麻雀和雕的对象都看作是父类的实例对象,当鸟类在吃东西时,就会有不同的表现形式,这就是多态的基本思想,向上转型

instanceof向下转型的关键字。在向上转型后,父类对象无法调用子类对象特有的方法,所以有了向下转型。

class Animals {
    public void sound(){
        System.out.println("动物的叫声");
    }
}
class Dog extends Animals{
    @Override
    public void sound() {
        System.out.println("汪汪汪~~~");
    }
    public void eat(){
        System.out.println("狗在吃骨头");
    }
}
class Cat extends Animals{
    @Override
    public void sound() {
        System.out.println("喵~~~");
    }
    public void play(){
        System.out.println("猫在玩耍");
    }
}
class Test{
    public static void main(String[] args) {
        //向上转型
        Animals a = new Dog();
        // Animals a = new Cat();
        a.sound();
        //a.eat()方法时无法调用的,如果使用需要向下转型
        //向下转型,先判断属于Dog还是Cat的实例,属于谁的实例就转型成谁
        if(a instanceof Dog){
            Dog dog = (Dog) a;
            dog.eat();
        } else if (a instanceof Cat) {
            Cat cat = (Cat)a;
            cat.play();
        }
    }
}

2.方法的多态

重写

发生在子类上,子类重写父类的方法,方法名、参数、返回值均相同。

重写与重载

重载发生在同一个类内部,方法名相同,参数数量或参数类型必须有不同,返回类型可以相同可以不同。

1、重写(Override)
	重写是子类对父类允许访问的方法进行重写, 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类
	子类和父类在同一个包中,那么子类可以重写父类除了声明为 private 和 final 的方法外的所有方法
	子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
	访问权限不能比父类中被重写的方法的访问权限更低。
	父类的成员方法只能被它的子类重写,子类能够根据需要实现父类的方法
	重写方法抛出的异常范围不能大于父类。异常也有继承关系,所以子类能抛出的异常不能高于父类
	参数列表与被重写方法的参数列表必须完全相同。
	声明为 final 的方法不能被重写。声明为 static 的方法不能被重写,但是能够被再次声明。
	构造方法不能被重写。
	如果不能继承一个类,则不能重写该类的方法。
2、重载(Overload)
	重载是在一个类里面,方法名字必须相同,而参数必须不同。返回类型可以相同也可以不同。
	被重载的方法可以改变返回类型;
	被重载的方法可以改变访问修饰符;
	被重载的方法可以声明新的或更广的检查异常;
	无法以返回值类型作为重载函数的区分标准。
3、方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
	方法重载是一个类中定义了多个同名的方法,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载
	方法重写是在子类存在方法与父类同名的方法,而且参数的个数与类型一样,就称为重写
	方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值