java面向对象(3)

25秒前 392阅读

目录

java面向对象(3)
(图片来源网络,侵删)

1.封装

 2.成员变量和局部变量

3. 继承

4.方法的重写 

5.super关键字

6.继承中的构造方法

7.抽象类



1.封装

封装:用访问权限修饰符修饰成员变量或成员方法,将它们的访问权限缩小,来达到我们的目的.

一般使用private修饰,使该变量私有化,不让外界乱访问,乱修改,我们主动给外界提供访问的方法

 封装的好处:

(1)隐藏类的信息

(2)便于加入控制语句

(3)通过特定的方法访问

(4)方便修改实现

 2.成员变量和局部变量

(1)在类中的位置不同

成员变量:在类中

局部变量:在类的方法中

(2)声明周期不同

成员变量:

静态的:随着类的加载而创建,随着类的销毁而销毁

非静态的:随着对象的创建而创建,随着对象的销毁而销毁

局部变量:

随着方法的调用而存在,方法执行完就销毁

(3)初始化方式不同

成员变量:创建对象后,调用构造方法赋值

局部变量:没有默认值,手动赋值

(4)访问权限修饰符不同

成员变量:可以使用访问权限修饰符

局部变量:不能使用访问权限修饰符

(5)在内存中的位置不同

成员变量:

静态的:在方法区中

非静态的:在堆中

局部变量:在栈中

3. 继承

继承:将不同对象的相同特征抽取出来并创建一个类(父类),将相同的特征定义到父类中,在该对象的类中就不用重复定义,直接使用extends关键字继承该父类,就拥有该父类中的除私有的属性

1.继承的好处:

(1)减少代码的冗余

(2)有利于代码的扩展

(3)继承的出现使类和类之间产生了is-a关系,为多态提供前提

2.何时使用继承:

当类和类之间有is-a的关系时

eg:猫是动物,小明是人

3.继承的语法:

在一个类的后面使用extends关键字继承另一个类

class A{
}
class B{
}
[访问权限修饰符] class A extends B{
}

4.继承的细节:

(1)子类会继承父类所有的实例变量和实例方法

(2)子类不能访问父类中私有的成员变量或成员方法

(3)java支持多层继承,注意不是多继承,即:一个子类可以间接有多个父类

(4)一个父类可以有多个子类

(5)当一个类中没有显示用extends关键字定义时,默认继承Object类,Object类是所有类的父类,是Java中最大的类,注意Object类在java.lang包中

(6)java中不支持多重继承

4.方法的重写 

1.定义:当父类中的方法不能满足子类的需求时,这时子类可以重写父类的方法

2.方法重写的要求:

(1)方法的名称,返回值,参数列表和父类的完全一致

(2)方法的访问权限修饰符,子类的必须大于等于父类的

(3)子类重写的方法抛出的异常必须小于等于父类抛出的异常

3.注意:

(1)父类私有的不能重写

(2)构造方法,静态方法,成员变量不存在重写

(3)跨包的父类的默认全写也不能重写

4.@Override使用

(1)@Override是java提供的一个注解标签,加了该标签的方法代表的是重写父类中的方法,这个标签不是必须的,但在重写方法时建议加上

(2)@Override好处

1.编译器会帮我们检查重写时的语法错误

2.当其他程序员阅读源码时就会知道这是重写父类中的方法

5.super关键字

作用:super关键字用于在子类中调用父类的成员变量,成员方法或构造方法

super和this很像,this在一个类中表示当前对象,但切记super不表示父类对象,super表示的是子类对象中父类的那一部分内存空间标识

6.继承中的构造方法

(1)子类在继承时,不会继承父类中的构造方法,只能通过super()去调用父类中的构造方法

(2)当在子类的构造方法中没有显示用super()去调用,则编译器会默认生成一个super()去调用父类的无参构造

(3)如果我们要显示写出super()去调用父类的构造方法时,必须写在子类的构造方法中的首行,这样做的目的是在子类中要用到父类的成员时,确保父类成员先初始化完成(先父后子)

注意:如果在子类中调用父类的无参构造时,父类中有有参构造且无参构造没有显示写出来(有参将无参覆盖),那么编译器会报错

7.抽象类

抽象类就是用abstract关键字修饰的类,抽象类除了不能创建对象,类的其他功能和普通类完全相同

1.抽象方法

用abstract修饰的方法就是抽象方法,抽象方法没有方法体

既然抽象类不能创建对象,那我们如何调用其中的属性呢,其实抽象类主要是为了让继承他的子类去实现其中的抽象方法,抽象类只提供一种标准,至于实现是交给子类的

注意:

(1)有抽象方法的类必须是抽象类,但抽象类中可以没有抽象方法

(2)一个类继承了抽象类,要么实现其中的抽象方法,要么该类也继续声明为抽象类

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]