继承:
提高了代码的复用性,增强了扩展功能。
让类与类之间产生了关系,该关系的出现,就有了第三个特征:多态。
出现了子父类:
父类如何由来:
对事物进行分析:不断的向上抽取相同的内容。出现父类。
子类可以获取父类中非私有的成员。
当子父类中出现一模一样的方法时:会出现的覆盖操作。
使用覆盖的注意事项:
1,子类在覆盖时,权限必须要大于等于父类的权限。
2,静态只能覆盖静态。
当功能一致还有使用父类中的原有功能时,需要通过super对其进行调用。
覆盖:
class Fu
{
void show(){}
}
class Zi extends Fu
{
void show(){super.show();}
}
super:该关键字的使用和this相同。
this代表的本类对象的引用。super代表的是父类对象的引用。
子类的实例化过程:
1,子类中所有的构造函数默认都会访问父类中的空参数构造函数。
原因:每一个构造函数的第一行有一条默认的super()语句,该语句是隐式的。
为什么非要访问父类中的构造函数呢?
因为子类会获取父类中的成员,所以要先看父类是如何对该成员进行初始化的。
为什么要放在第一行呢?
因为初始化的动作要先完成。
2,当父类中没有空参数的构造函数时 ?子类的构造函数必须通过this或者super语句指定要访问的构造函数。
class Fu
{
Fu()
{
System.out.println("Fu");
}
}
class Zi extends Fu
{
Zi()
{
//super();
System.out.println("Zi");
}
}
main()
{
new Zi();// Fu Zi.
}
----------------
java只支持单继承,不支持多继承。
原因:如果支持多继承,会存在安全隐患。当多个父类中定义了相同功能,但功能体不一致。
那么子类对象在调用该功能时,不明确会运行哪一个。
一个儿子只能有一个父亲。不可以有多个父亲。
什么时候定义继承呢?
当类与类之间出现了所属关系(is a)时,可以定义继承。
怎么判断所属关系呢?
这个类是否可以获取另一个中所有的内容。如果可以,可以将这个类继承另一个类。
注意:千万别为了拿到其他类中的方法而进行继承。
class A
{
void show1(){}
void show2(){}
void show3(){}
void show4(){}
}
class B extends A
{
void showA(){}
void showB(){}
}
有A,B两个类。
A 中有四个功能。show1 show2 show3 show4
B中也有四个功能。showA showB show3 show4
B中的两个功能。在A中已有。那么可不可以直接继承A,而获取这两个功能呢?
虽然B获取到了show3。show4功能。但是,也将不需要的show1,show2获取到了。
这时B和A之间是不存在继承关系的。
虽然A和B没有继承关系,但是A和B中是不是有相同内容,那么A和B可以向上抽取。提高代码的复用性。
将相同功能,抽取到C类中。
class C
{
void show3(){}
void show4(){}
}
class A extends C
{
void show1(){}
void show2(){}
}
class B extends C
{
void showA(){}
void showB(){}
}
扩展:继承的出现,有一个弊端,就是打破了封装性。
--------------------------------
final:
1,final可以修饰类,方法,变量。
2,final修饰的类不可以被继承。
3,final修饰的方法不可以被覆盖。
4,final修饰的变量是一个常量。只能被赋值一次。
5,内部类在局部位置上,只能访问被final修饰的局部变量。
final其实就是用来锁住内存区域。为了增强程序的严谨性。
--------------------------------
抽象类:
1,抽象方法的出现需要存在与抽象类中。
2,抽象类和抽象方法需要使用abstract关键字来修饰。
3,抽象方法只需要声明,不需要实现。
4,抽象类不可以通过new进行实例化。
原因:抽象类实例化,调用抽象方法没意义。
5,抽象类必须由自己的子类覆盖调用所有的抽象方法后,
子类才可以进行实例化,否则该子类还是抽象类。
抽象类是怎么出现的呢?
其实也是向上抽取而来的。
方法分成两部分,一部分是方法声明,一部分是方法主体。
在向上抽取的过程中,出现了功能声明一致,但是功能主体不同。
这时,我们只抽取声明,而不抽取主体。
那么这个没有主体的方法,需要定义成抽象的来表示。
而抽象方法一定要存在与抽象类中。
示例:
需求:预热班学生,就业班学生。
预热班学生:学习方法(学习是基础部分),睡觉方法(我倒)。
就业班学生:学习方法(学习是高级部分),睡觉方法(我倒)。
这些学生具备一些共性。
为了提高复用,向上抽取相同功能。
abstract class XueYuan
{
void sleep()
{
System.out.println("wo dao");
}
abstract void study();
//void study(){System.out.println("xuexineirong");}
}
//抽象方法有什么好处呢?强制子类去做某些事。
class YuRe extends XueYuan
{
vodi study()
{
System.out.println("base");
}
/**/
}
class JiuYe extends XueYuan
{
void study()
{
System.out.println("gaoji ");
}
}
//一年后来了个冲刺班:
class ChongCi extends XuYuan
{
void study()
{
System.out.println("chongci ");
}
}
抽象类的特点:
1,抽象类中是否有构造函数呢?
抽象类和一般没有太大的区别,也是一样在不断的描述事物,只不过该类可以定义抽象方法而已。
所以该类中是有构造函数的。该构造函数的出现为了给子类继续实例化的。
2,抽象类中可不可以不定义抽象方法呢?
可以,那么该类的出现只有一个作用,就是不让该类建立对象。
这种情况相对少见,awt,适配器类是这样设计的。如WindowAdapter。
抽象关键字不可以和哪些关键字共存呢?
private static final
需求:
公司内有普通员工,和经理,所有的员工都具有姓名,工号,工资。
对于经理多了一个奖金。
请设计一下该程序的基本数据模型。
abstract class Employee
{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
this.name = name;
this.id = id;
ths.pay = pay;
}
abstract void work();
}
class Pro extends Employee
{
Pro(String name,String id,double pay)
{
super(name,id,pay);
}
void work()
{
System.out.println("pro work")
}
}
class Manager extends Employee
{
private double bonus;
Manager(String name,String id,double pay,double bonus)
{
super(name,id,pay);
this.bonus = bonus;
}
void work()
{
System.out.println("manager work");
}
}
------------------------------------------------
分享到:
相关推荐
Java --- 继承、抽象类
Java程序设计课程实验9主要关注的是继承和抽象类的概念及其应用。在面向对象编程中,继承是实现代码重用和创建类层次结构的关键机制。抽象类则是用来作为其他类的基类,它不能被实例化,但可以包含抽象方法,这些...
java中的继承和抽象 欢迎大家来下载观看。有不足之处还望指点
- 子类继承抽象类必须实现所有抽象方法,除非子类也是抽象类 - 抽象类用于定义一组公共行为,而具体实现由其子类完成 总结和任务: 学习Java的类继承、接口和抽象类是掌握面向对象编程的关键。理解这些概念有助于...
**Java编程中的“类、抽象和封装”是面向对象编程的核心概念,对于任何Java学习者来说,这些都是必须掌握的关键知识点。清华大学的JAVA教程以其严谨性和深度广度闻名,本课件便是针对这些核心概念进行深入讲解的教学...
2. **继承抽象类**:如果一个类继承了抽象类,那么要么这个类也必须是抽象类,要么实现所有抽象方法。 3. **接口与抽象类的区别**:接口全由抽象方法组成,而抽象类可以包含非抽象方法。一个类可以实现多个接口,但...
在 Java 中,继承、抽象和方法重写是面向对象编程的三大要素。本文将对这三者进行详细的解释和说明。 一、继承(Inheritance) 继承是面向对象编程的重要特性,它允许一个类继承另一个类的属性和行为。继承的好处...
在Java中,继承抽象类的非抽象子类必须实现父类中的所有抽象方法,否则子类也将变为抽象类,需要使用`abstract`关键字声明。 此外,Java还允许类继承多个抽象类,这是通过接口(interface)实现的。接口是一种完全...
总结一下,抽象类和接口都是Java中实现多态的关键机制。抽象类提供了一种模板设计,允许子类继承并重写其抽象方法,而接口则定义了一组契约,强制实现类提供特定的方法。在设计时,我们需要根据具体情况选择使用抽象...
在这个主题中,我们将深入探讨Java中的两个核心概念:继承和抽象。这12页的PDF文档将全面解析这两个概念,帮助开发者更好地理解和应用它们。 首先,我们来讨论继承。在Java中,继承是面向对象设计的基本原则之一,...
Java类的继承、抽象类和接口 Java 是一个基于面向对象编程的语言,它具有继承、封装、多态等特性。在本章中,我们将详细介绍 Java 中的类继承、抽象类和接口这些重要概念。 类继承 类继承是面向对象编程的重要...
在Java编程语言中,继承、接口和多态是面向对象编程的三大核心概念。这个小练习通过"运动员和教练"的案例,展示了这些概念的实际应用。 首先,让我们深入理解这三大概念: 1. 继承(Inheritance): 继承允许一个...
子类继承抽象类时必须实现所有抽象方法,而实现接口则必须提供接口中所有方法的实现。这两种方式都可以用来实现继承,但内存管理和行为有所不同。 通过深入理解上述知识点,我们可以更好地管理Java程序中的内存分配...
"Java抽象类和接口和继承之间关系" Java抽象类和接口是两种不同的概念,它们之间存在着继承关系。在Java中,抽象类(abstract class)和接口(interface)都是用来描述对象的行为和状态的,但它们之间有着明显的...
JAVA中的继承与抽象 继承是面向对象编程的基本特征之一,它允许在已有的类基础上创建新的类,并继承已有类的成员变量和成员方法。继承的概念定义是:当类与类之间存在相同(共性)的内容,并满足子类是父类中的一种...
##### 1.3 类继承抽象类 抽象类是一种特殊的类,它不能被实例化,通常用于提供部分实现。一个抽象类可以包含抽象方法(没有实现体的方法),子类必须实现所有抽象方法才能实例化。如果子类本身也是一个抽象类,那么...
通过本文的学习,您应该已经理解了Java中继承的基本概念和用法,包括如何创建父类和子类、如何重写方法以及如何使用`super`关键字。希望这些知识能够帮助您更好地理解和运用Java中的继承机制。在实际开发中,结合...