Java基础之继承和多态

回顾:面向对象和面向过程

(需要在开发中慢慢体会)

面向过程是编年体;面向对象是纪传体。

回顾:封装

  • 封装的步骤:

    1.所有属性私有化,使用private关键字进行修饰,private表示私有的,修饰的所有数据只能在本类中访问。

    2.对外提供简单的操作入口,也就是说以后外部程序要想访问age属性,必须通过这些简单的入口进行访问:
    - 对外提供两个公开的方法,分别是set方法和get方法
    - 想修改age属性,调用set方法
    - 想读取age属性,调用get方法

    3.set方法的命名规范:
    public void setAge(int a){
    age = a;
    }

    4.get方法的命名规范:
    public int getAge(){
    return age;
    }
    //快捷键 alt + insert

    注:setter和getter方法中没有static关键字,有static关键字修饰的方法调用方式为:类名.方法名(实参)

  • 封装的好处:

    1.封装之后,将复杂的事物简单化(所有数码产品都是这个原理)

    2.封装之后才会形成真正的“对象”

    扫描二维码关注公众号,回复: 14702853 查看本文章

    3.封装就意味着以后的程序可以重复使用。

    4.提高安全性

构造方法/构造器/Constructor

1.构造方法语法结构:
		[修饰符列表] 构造方法名(形式参数列表){
    
    
			构造方法体;
		}

	2.普通方法的语法结构:
		[修饰符列表] 返回值类型 方法名(形式参数列表){
    
    
			方法体
	}

	3.对于构造方法来说,“返回值类型”不需要指定,并且不能写void,
	只要写了void ,那么这个方法就成为普通方法了。

	4.对于构造方法来说,构造方法的方法名必须和类名保持一致。

	5.构造方法的作用?
		构造方法存在的意义是,通过构造方法的调用,可以创建对象。
		
	6.构造方法应该怎么调用?
		- 普通方法是这样调用的: 方法修饰符中有static的时候: 类名.方法名(实参列表); 方法中没有static的时候:引用.方法名(实参列表)
		- new 构造方法名(实参列表)

	7.当一个类中没有定义任何构造方法的话,系统默认给该类提供一个无参数的构造方法,这个构造方法被称为缺省构造器(default/默认构造器)

	8.构造方法支持重载机制。在一个类当中编写多个构造方法,这多个构造方法显然已经构成**方法重载**机制。

继承

  • 继承基本作用:代码复用。但更重要的是:有了继承才有了以后的方法覆盖多态机制

  • 语法格式: [修饰符列表] class 类名 extends 父类名{
    类体 = 属性 + 方法
    }

  • java语言中的继承只支持单继承,一个类不能同时继承很多类,只能继承一个类。在Cpp中支持多继承。
    B类继承A类,其中:
    A类称为:父类,基类,超类,superclass
    B类称为:子类,派生类,subclass

-java语言中子类继承父类都继承哪些数据呢?
- 私有(private)的不支持继承
- 构造方法不支持继承
- 其他数据都可以被继承

-虽然java语言当中只支持单继承,但是一个类也可以间接继承其他类,例如:
C extends B{
}
B extends A{
}
A extends T{
}
C直接继承B类,但是C间接继承T,A类

-java语言中假设一个类没有显示的继承任何类,该类默认继承Java库当中提供的java.lang.Object

方法重载 Overload

1.方法重载又称为Overload

2.什么时候用? 在同一个类当中,方法完成的功能是相似的,建议方法名相同,以便程序员的编程。

3.什么条件满足之后构成方法重载
	-在同一个类中
	-方法名相同
	-参数列表不同:类型、顺序、个数

4.方法重载和什么无关?
	 -和方法的返回值类型无关
	 -和方法的修饰符列表无关

方法覆盖 Override

1.什么时候用? (儿子不听爸爸的话系列嘿嘿)
	当父类中的方法已经无法满足当前子类的业务需求,
	子类有必要将父类中继承过来的方法进行重新编写,
	这个重新编写的过程称为方法重写/方法覆盖

2.什么条件满足之后方法会发生重写呢?
	-方法重写发生在具有继承关系的父子类之间
	-返回值类型相同,方法名相同,形参列表相同
	-访问权限不能更低,只能更高
	-抛出异常不能更多,可以更少。【以后讲】
	
3.建议方法重写的时候尽量复制粘贴,不要编写,容易出错,导致没有产生覆盖。

4.注意:
		私有方法不能继承,所以不能覆盖
		构造方法不能继承,所以不能覆盖
		静态方法不能覆盖
		覆盖只针对方法,不谈属性

多态

1.多态中的概念:
向上转型(自动类型转换)
使用格式:父类类型 变量名 = new 子类类型()
向下转型(强制类型转换)
使用格式:子类类型 变量名 = (子类类型)父类类型

前提:两种类型必须要有继承关系
没有继承关系编译不能通过
有父类引用指向子类对象

附录:

AS偷懒技巧:

ctrl + alt + L: 代码一键格式
alt + insert: 插入方法(getter、setter等)
ctrl + / 注释//
ctrl + shift + / 多行注释/**/

修饰符列表

1.public

适用对象:类、接口、成员。

介绍:无论所属的包定义在哪,该类(接口、成员)都是可访问的。

2.private

适用对象:成员。

介绍:成员只可以在定义它的类中被访问。

3.static

适用对象:类、方法、变量、初始化函数。

介绍:static修辞的内部类是一个顶级类,它和类包含的成员是不相关的。静态方法是类方法,被指向到所属的类而不是类的实例。静态变量是类变量,无论该变量所在的类创建了多少实例,该变量只存在一个实例被指向到所属的类而不是类的实例。初始化函数是在装载类时执行的,而不是在创建实例时执行的。

4.final

适用对象:类、方法、变量。

介绍:被定义成final的类不允许出现子类,不能被覆盖(不应用于动态查询),变量值不允许被修改。

5.abstract

适用对象:类、接口、方法。

介绍:abstract类中包括没有实现的方法,不能被实例化。abstract方法的方法体为空,该方法的实现在子类中被定义,并且包含一个abstract方法的类必须是一个abstract类。

6.protected

适用对象:成员。

介绍:protect成员只能在定义它的包中被访问,如果在其他包中被访问,则实现这个方法的类必须是该成员所属类的子类。

猜你喜欢

转载自blog.csdn.net/victorrrrt/article/details/120950354