Java学习笔记-4.继承与多态

一、继承机制

1.继承:允许一个类作为另一个类的扩充版本

2.单继承:一个类只继承了一个父类    多继承:一个类继承了多个父类

Java只支持单继承,C++支持多继承

二、类的继承

1.形式:

class SubClass extends BaseClass {

//子类类体,定义子类的新成员

}

Java中所有的类都直接或间接地继承类 java.lang.Object

2.构造方法

(1)显式构造方法    形式:super(参数表);

系统执行到这条语句时,会根据参数表判断调用父类中哪个构造方法(参数表可以为空)

注意:使用super调用父类构造方法时,必须放在子类构造方法中的第一句

super的参数不可以是this或当前对象的对象成员,因为构造方法还没完成

(2)隐式构造方法:若子类没有显式构造方法,系统会依次调用父类的默认构造方法和子类的默认构造方法

3.子类对象的初始化

顺序:(1)载入类的类文件  (2)从父类到子类,依次初始化静态成员变量

(3)从父类到子类,依次初始化对象的成员变量  (4)调用类构造方法(首先调用父类)

(5)从Object类开始初始化块和构造方法,然后回归执行其子类的初始化块和构造方法,依次类推,直至当前类的初始化块和构造方法

4.子类的对象拥有父类中定义的所有成员,但不能访问父类中的私有成员(private)

5.覆写:在子类中定义一个与父类中方法名和参数表完全相同的方法

注意:若子类中方法func()覆写了父类中的方法,则相对于父类的func()方法,子类中方法func()的访问控制不能缩小

子类中func()方法声明抛出的异常不能超过父类中func()方法声明的

例:父类中:

double getIncome() {

return wage + bonus;    //wage和bonus均为private修饰的

}

子类中:

double getIncome() {

return super.getIncome() + dividend;    //super表示调用父类的getIncome方法

}

三、对象类型转换和多态

1.多态:同一个实体同时具有多种形式,这样可以提高代码的可重用性

2.对象类型转换分为向上转型和向下转型

向上转型:子类的对象被看做父类的对象来使用

这样的类型转换是安全的,但会丢失子类中新定义的那些信息

向下转型:父类的对象被看做子类的对象来使用(需要使用强制转换)

这种类型转换时不安全的,有可能造成信息的缺失

3.Java中通过覆写机制可以在继承关系的若干类中定义方法名、参数表、返回值相同但方法体不同的方法,在程序运行时,根据所引用对象的类型来判断执行哪个方法,这称为动态绑定(即运行时确定执行哪个方法)

Java中只有私有方法、final修饰的方法、静态方法是静态绑定(即编译时绑定)的

四、关键词final

1.final可以用于修饰变量、方法和类,表示被修饰的东西只能做一次初始化,之后不能发生改变

当final修饰方法参变量时,表示方法中不会对参变量的值做修改

final修饰的静态成员变量必须在声明时或在静态初始化块中初始化

final修饰的方法在继承过程中不能被覆写

final修饰的类不能被其他类继承

2.final类没有子类,final类的成员方法不会被覆写,final类的成员变量却不一定是常变量

五、抽象方法与抽象类

1.抽象方法:只有方法名、参数表、返回值,没有方法体(不能被执行)

声明语法: abstract returnType function(parameters list);    //没有大括号

在方法声明前用关键字abstract修饰

抽象方法可以被覆写

静态方法、私有方法和final修饰的方法不能被覆写,因此不能定义为抽象方法

2.抽象类:没有具体对象的类,语法:在类定义前用关键词abstract修饰

3.注意:

(1)如果某个类含有抽象方法,那么这个类必须定义为抽象类,但抽象类可以没有抽象方法

(2)抽象类不可以创建对象

4.若抽象类的一个子类未实现父类的抽象方法,这个子类也是抽象类,必须用关键字abstract修饰

作用:抽象类保证了其所有子类若可以实例化,则必须实现抽象类中声明的抽象方法

六、接口

1.定义形式:interface interfaceName {…}

成员方法默认为抽象的、公有的,成员属性默认为静态的、final修饰的

接口只是提供一种形式,具体的实现细节交由它的类完成

由于接口不涉及具体的实现,因此在接口中的成员变量是静态常变量,默认为static和final修饰

2.类实现一个接口:class MyClass implements A, B, C {…}

一个类可以实现多各个接口

注意:虽然在接口中没有显式声明方法是公有的,但接口中默认的访问控制是公有的,而类中默认的访问控制是包内友好,所以必须在类中将这个方法用public修饰

3.接口和抽象类的选择:

Java中类之间不支持多继承,但类可以实现多个接口

若类需要包含一些方法的实现,必须实现为抽象类,其他情况两者皆可,优先选择使用接口,使程序更加易于扩展

七、内部类和匿名内部类

1.Java允许在类的内部定义另一个类,称这个在类体内部的类为内部类,包含内部类的类为外部类

内部类中可以访问外部类的方法、属性

与一般类的不同:外部类可以访问其内部类的私有成员

2.在其他类中只可以访问public或默认访问控制的内部类,不能创建私有的内部类对象

且创建内部类对象时必须有相应的外部类对象,但创建静态内部类的对象时可以通过外部类类名

3.在其他类中创建内部类对象

例:

class OuterClass {
    class InnerClassA{}    //创建内部类对象时需要外部类对象
    private class InnerClassB{}    //不能创建私有内部类对象
    static class InnerStaticClass{}    //可通过类名创建静态内部类对象
}
class InnerClassDemo {
    public static void main(String[] args) {
        OuterClass out = new OuterClass();
        OuterClass.InnerClassA inner = out.new InnerClassA();
        OuterClass.InnerStaticClass a = new OuterClass.InnerStaticClass();
    }
}

4.匿名内部类:没有类名的内部类

匿名内部类无法定义构造方法

八、Object类

1.类java.lang.Object是所有Java类的父类

设计Object类的作用:(1)可以声明Object类型的对象引用指向任何类型的对象

(2)在Object类中定义的一些方法,自动地继承给所有的类

2.Object类的常用方法:

(1)boolean equals(Object oth)    作用:比较两对象引用是否相等

(2)String toString()    作用:将对象转换为字符串

(3)finalize()    作用:释放对象

(4)wait()    作用:线程等待

(5)notify()    作用:唤醒线程

注:方法(1)在使用时必须覆写

方法(2)返回的字符串是由对象引用的类型、字符@、对象哈希码的无符号十六进制数三部分组成的,一般没什么价值,也须覆写

九、包装类

1.8种基本数据类型:byte short int long float double char boolean

对应的包装类:Byte Short Integer Long Float Double Character Boolean Void

2.基本数据类型的数据与包装类对象的转换:typeValue()方法

例:

int a = 10;
Integer obj = new Integer(a);
System.out.println(obj.intValue());

3.包装类对象或基本数据类型的数据与字符串的转换:toString方法

形式:public String toString();

将字符串转换为包装类的对象:

例:public Integer(String s);

将字符串转换为基本数据类型的数据:valueof(String)方法 或 parseType()静态方法

4.在JDK5.0版本之后,Java虚拟机支持自动装箱、拆箱机制

自动装箱:将基本数据类型的数据自动封装为相应的包装类对象

自动拆箱:从包装类对象中自动提取基本数据类型的数据

时间: 2024-11-24 00:23:40

Java学习笔记-4.继承与多态的相关文章

Java学习笔记之继承

一.继承的基础 在Java术语中,被继承的类叫超类(superclass),继承超类的类叫子类(subclass). 举例说明: 1 class Box 2 { 3 public double width; 4 public double height; 5 public double depth; 6 7 //重载构造方法 8 public Box(Box ob) 9 { 10 width = ob.width; 11 height = ob.height; 12 depth = ob.dep

黑马程序员——JAVA学习笔记四(继承、接口、内部类)

1,    通过extends关键字让类与类之间产生继承关系.多个类中存在相同属性和行为时,将这些内容抽取到单独的一个类中,那么多个类无需定义这些属性和行为,只要继承那个类即可,已存在的类叫做超类,基类,或父类.新类称为子类,派生类,孩子类. 子类可以直接访问父类中的非私有的属性和行为.子类无法继承父类中私有的内容.JAVA不支持多继承,只支持单继承,多实现. 继承提高了代码复用性,让类与类之间产生了关系.为多态提供了前提. 2,    super关键字代表父类中成员变量内存空间的标示.两个作用

Java学习笔记(十)——多态

一.多态 1.对象的多种形态 (1)引用多态: 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 (2)方法多态: 创建本类对象时,调用的方法为本类方法: 创建子类对象时,调用的方法是子类方法,如果没重写,调用的就是继承父类的方法 (3)父类的引用是不可以调用子类特有的方法. 二.多态中的引用类型转换 1.向上类型转换(隐式/自动类型转换) 小类型到大类型的转换 2.向下类型转换(强制类型转换) 大类型到小类型的转换 3.instanceof运算符,来解决引用对象的类型,避免类型转换的

java学习笔记(八)多态与抽象

多态和抽象是从继承引出来的两个重要的概念,多态允许对象以多种形式存在,而抽象则允许创建抽象类. 多态是指一个对象有多种形式的能力.一个类的子类可以定义它们唯一的行为,同时共享父类的某些相同特征.动态多态指在运行中系统才能动态确定方法所指的对象. 多态的技术基础: 向上转型技术:一个父类的引用变量可以指向不同的子类对象,或者说一个子对象可以被当做一个父类类型; instanceof关键字:用于判断运行时对象的真正类型; 动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法,从而

java学习笔记(六)继承

继承是面向对象编程中最重要的特征之一,它允许通过继承一个已经存在的类,来编写一个新类.已有的类称为父类,也可以称为基类,超类,新类称为子类也称为派生类. 继承使用关键字extends,用在类名之后,例:public void class salary extends Employee(){ } 子类salary 继承父类Employee java中的类只能继承一个类. 子类能继承父类中用public protected 修饰的成员. 继承的单根性(单继承):一个java类只能有一个父类. 继承的

Java学习笔记3——继承

继承 继承的好处:子类拥有父类的所有属性和方法,peivate修饰的无效:实现代码复用 class 子类 extends 父类 例如: class Dog extends Animal{              ...... } 父类: package com.imooc; public class Animal {  public int age;  public String name;  public void eat(){   System.out.println("动物具有吃东西&q

java学习之路--继承(多态的动态绑定)

动态绑定过程中,对象调用对象方的执行过程 1:编译器查看对象的声明类型和方法名.有可能有多个方法名相同,但参数类型不一样的重载方法. 2:编译器查看调用方法时提供的参数类型.该过程叫重载解析,在相同的方法名中有一个参数类型完全匹配的的方法,就选这个合适的方法.如果没有找到一个参数类型匹配的方法,或者转换类型后也没有匹配的方法,也会报错. 3:如果是private或者static或者final方法或者构造器,那么编译器就能准确的知道应该调用哪个方法,这种调用方式叫做静态绑定.与此对应的是,调用的方

java学习笔记(Core Java)5 继承

第五章 继承 1. 类 超类 子类继承:extends (所有继承嗾使公有继承,没有私有继承和保护继承) c+++: 用: 2.使用super(c#使用Base)调用基类的方法 子类构造器会默认调用基类的无参构造来初始化基类的私有域 如果基类没有无参构造,则会报错 3.this :1.引用隐式传参 2.调用类其他构造器 super:1.调用超类的方法 2.调用超类的构造器 c++使用初始化列表来调用基类的构造函数 4.java中,不需要将方法声明为虚拟方法方法,基类指针指向不同对象时,虚拟指针知

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要