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

本文深入讲解了Java中的封装、final特性、继承规则,包括属性和方法的继承与覆盖,以及多态的概念,通过实例演示向上转型和向下转型的应用。重点介绍了如何使用super关键字和instanceof进行操作。
摘要由CSDN通过智能技术生成

封装:

private实现属性的封装。当属性被private修饰后,只有在当前类内部可见。

提一下final终结器:之前在随笔2提到了,这里再补充一下

1.final修饰属性,表示该属性为常量,值不能让修改。

2.final修饰类,表示该类不能有子类。

3.final修改方法,表示该方法无法被覆写。

final一般也可以用作封装的手段。

继承:

代码中创建的类 , 主要是为了抽象现实中的一些事物 ( 包含属性和方法 ).
有的时候客观事物之间就存在一些关联关系 , 那么在表示成类和对象的时候也会存在一定的关联 .
例如 , 设计一个类表示动物,猫狗鸟等等都是动物,他们都有叫声,吃的食物等等,把他们每个种类当做一个类来编写,会有大量冗余的代码,造成不必要的空间消耗。
所谓继承,就是从已有的类中衍生出新的类,新的类具有已有类的数据属性和行为,并能扩展新的能力。像动物这样被继承的类,我们称为父类,基类或超类,对于像猫和狗这样的类,我们称为子类,派生类。和现实生活中的儿子继承父亲的财产类似,子类也会继承父亲的属性和方法,已达到代码重用的效果。

继承的规则

.使用extends指定父类

.java中一个字类只能继承一个父亲

.子类会继承父类所有的public属性和方法

.对于父亲的private的属性和方法,子类中是无法访问的

类中属性,方法的继承与覆盖

1.属性的继承与覆盖


       子类可以继承父类的所有非私有属性。

      子类也可以覆盖继承的成员变量,对于子类可以从父类继承的成员变量,只要子类中定义的成员变量和父类中的成员变量同名,子类就覆盖了继承的成员变量。

       当子类执行它自己定义的方法时,所操作的就是它自己定义的数据成员,,从而覆盖父类继承来的数据成员。

2.方法的继承与覆盖


父类中非私有( private )方法可以被子类所继承。

       在子类继承父类的成员方法时,应注意一下两项:

       *子类不能访问父类的 private 成员方法,但子类可以访问父类的 piblic ,protected 成员方法。

       *访问 protected 时,子类和同一包内的方法都能访问父类的 protected 成员方法,但其他方法不能访问。

        子类和父类之间,概念上的关系是is-a的关系。

       方法的覆盖是指子类中定义一个方法,并且这个方法的名字,返回类型,参数列表与父类继承的方法完全相同。


注意事项


1.重写和重载完全不一样。

2.普通方法可以重写,static修饰的静态方法不能重写。

3.重写中子类的方法的访问权限不能低于父类的方法的访问权限。

4.重写的方法返回值类型一定和父类的方法相同。

另外,针对重写的方法,可以使用@override注解来显式指定,有了这个注解能帮我们进行一些合法性校验,例如不小心将方法名字拼写错了,那么编译器就会发现父类中没有这个方法,就会编译报错,提示无法构成重写。

这里说一下super()

因为子类不能继承父类的构造方法。

如果父类中没有默认构造方法或希望调用带参数的父类构造方法,要使用关键字super来显示调用父类方法。使用关键字super来调用父类构造方法的语句,必须是子类构造方法的第一个可执行语句。调用父类构造方法时,传递的参数不能是关键字this或当前对象的非静态成员。

多态:

所谓多态,一种方法多种状态,多态一般主要是向上转型+复写

向上转型

父类名称 父类引用 = new 子类实例();

向上转型发生的时机(用处) :
1.产生对象时:直接赋值
2.方法参数传递
3.方法返回值
多态的好处:方便使用者理解,方便扩展
放一段代码方便理解
/**
 * 多态的学习测试  向上转型
 */
//用法:产生对象时
public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal("动物",0);
        Animal Dog = new Dog("狗",3);
        Animal Cat = new Cat("猫",2);
        animal.eat("食物");
        Dog.eat("狗粮");
        Cat.eat("猫粮");
    }

    //用法:方法返回值
    public  static Animal test(){
        return  new Dog("汪",3);
    }
    //用法 方法参数传递
    public static void fun(Animal animal,String food){
        animal.eat(food);
    }
}

向下转型(必须使用了向上转型,才能使用向下转型):

//向上转型

Animal animal = New Dog();

//向下转型

Dog dog = (dog) Animal;

一般需要使用子类独有的方法时,才把它向下转型

向下转型是有风险的,如果强转的类型没有关系,则一定会出错

例:Dog dog = new Dog();

        Cat cat = (cat)dog:                                出错

这里说下instanceof  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值