java-面向对象<二>-《下篇》
1.类的继承
特点:a.继承可以简化类的定义。
b.java只支持单继承,一个子类只能继承一个父类。
c.可以有多层继承
d.子类可以继承父类的所有成员变量和成员方法,但不可以继承父
类的构造方法
e.在子类的构造方法中可以使用 super (参数列表)来调用父类的构
造方法。前提该父类有构造方法(默认情况下是无参数的构造方法,只是没有显示出来,如果定义了一个显示的有参数构造方法,原来默认的构造方法将消失,所以最好定义一个有参数的构造方法和一个无参数构造方法)
2.子类对象的实例化过程
注意:子类构造方法中,super(…)和this(…)不能同时出现,而且只能作为第一句出现在构造方法里,这是Java规定的执行流程,第一句检查是否有super和this语句。
3.覆盖父类的方法
相同的方法名,参数列表,返回类型,不可以缩小访问权限,可以扩大。注意:可以使用super(…)调用父类的方法,这样就可以调用父类里被覆盖的方法了。
4.final关键字
a.final标记的类不可以继承。
b.final标记的方法不可以被子类重写。
c.final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。
d.final 标记的成员变量必须在声明的同时赋值,如果在声明的时候没有赋值,那么只有一次赋值的机会,而且只能在构造方
法中显式赋值,然后才能使用。
e.final标记的局部变量可以只声明不赋值,然后再进行一次性的赋值。
f.final 一般用于标记那些通用性的功能、实现方式或取值不能随意被改变的成分,以避免被误用。
注意:final 标志的变量(成员变量或局部变量)即成为常量,只能负赋值一次,但这个“常量”也只能在这个类的内部使用,
不能再类的外部直接使用。当用public static final 标志常量时,它就成了全局变量,而且只能在定义时赋值,不能
在构造方法中进行赋值。
5.抽象类和接口
抽象类:
(1)抽象类或抽象方法用abstract修饰
(2)抽象方法只需声明,不需实现
(3)抽象类不能被实例化,即不可new产生对象
(4)含抽象方法的类一定是抽象类,抽象类可以有非抽象方法
(5)抽象类的子类必须覆盖所有的抽象方法才可以实例化,否则
还是抽象类
接口: 比抽象类还抽象的类(其方法都是抽象方法)
(1)用interface修饰
(2)所有方法都是抽象方法,且变量默认是全局静态变量即
public static final
(3)一个类可以impements(实现)多个接口
作用:解决了Java的单一继承带来的局限性,使类同时继承多样的特性,从而达到多重继承的目的,
这同时也解决了c++带来的多重继承的问题,多重继承的危险在于一个类同时继承了同一个方
法的不同实现,而接口没这问题,因为接口里的方法都没有实现
注意:extends关键字必须在implements关键字的前面
6.对象的多态性
多态是指引用类型在不同情况下的多种形态。 也可以理解为通过指向父类的指针,调用不同子类中实现的方法。
a.子类可以自动转换为父类
b.父类只能强制转换为子类
c.instanceof 操作符 :用来判断某个对象是否实现了某个接口或某个类
使用规则:对象 instanceof 类名(或接口),返回值为布尔类型。
7.object 类
在Java中object类是所有类的父类,在Java类层中是最高层类,是所有类的超类,所有object的方法适用于所有类,
某个类没有继承时默认继承object类。
8.“equals”和“==”使用
“==”适用于基本数据类型,比较两个值是否相等,如int型
“.equals( )”方法适用于引用类型,比较两个对象内容是否一样。
Java里许多类有自己的equal( )比较方法,如String ,Integer等
对于自定义的类,其equals方法要重新自己定义比较。
9.匿名内部类。
匿名内部类也就是没有名字的内部类,正因为没有名字,所以匿名内部 类只能使用一次,它通常用来简化代码编写,
但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口
abstract class Person { public abstract void eat(); } public class Demo { public static void main(String[] args) { Person p = new Person() { public void eat() { System.out.println("eat something"); } }; p.eat(); } }
interface Person { public void eat(); } public class Demo { public static void main(String[] args) { Person p = new Person() { public void eat() { System.out.println("eat something"); } }; p.eat(); } }
9.return语句
return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行
(仅仅一个return语句)。
对于非void返回值的方法里,必须使用“return 返回值类型一致的变量”
对于void返回值的方法里,可以不写“return”,如果要写必须在最后一行写,因为“return”语句在默认情况隐藏在最后一行。
10.访问修饰符
1.private :只能被类的内部其他成员访问,注意:不能再方法体内声明变量的前面加private修饰符
子类可以继承父类的private变量,但是无法访问.
2.默认修饰符:可以被同一包下的其他的类访问,如果子类与父类不在同一包下,则子类不可访问父类的默认修饰符的成员
3.protected :可以被同一包下的其他类访问,也可以被不同包下的子类访问
4.public:可以被所有包下的其他类访问,即所有类访问
小总结:默认情况:无参数构造方法,Object父类继承,void方法里return语句。