1.什么是继承?为什么需要继承?继承到什么?
我们在编写一个类的时候,所有的学生(无论大小中)都可以是一种类型的,即定义为一个简单的Student类
代码:
//所有一般类学生的定义
public class Student {
public String name;
public void setName(String name){
this.name = name;
}
public void study(){
System.out.println(name+"在学习");
}
}
但这个系统给某个大学使用时,就会出现问题——我们需要再定义一个大学生类,可以肯定的是,大学生中也有学习的方法,学分,名字属性,但具体的学习方法却是和一般学生是不一样的,所以我们就没必要再定义一个大学生类把这些代码再敲一遍,那么我们就可以定义一个学生类,让它继承Student类,因为不管什么学生都有study()这样一个方法。
代码示例:
public class UNStudent extends Student{
}
OK,通过extends 关键字,我们就免去了重写代码的麻烦,在UNStudent中就自动继承到了它的父类中的方法和属性。
代码示例:public class Test {
public static void main(String[] args){
UNStudent stu1 = new UNStudent();
stu1.setName("我是大学生");
stu1.study();
}
代码执行结果: 我是大学生在学习
2.自动转型与强制转型
在上面定义的两个类中,大学生类就是子类(扩展类) ,学生类就是父类(基类,超类)。
自动转型的意思:
就是子类对象的类型可以自动转成父类类型
代码示例: Student stu2 = new UNStudent();
stu2.setName("张三");
stu2本身类型是UNStudent类,但被声明为了Student类。
这个时候如果在UNStudent没有方法的重写,那么stu2所调用到的方法就只有父类中的内容。
如果子类重写了父类的方法,则子类类型的对象会调用自己重写之后的方法。
转型以后仍然可以调用到UNStudent类中特有的方法。
//强制转型:强制将父类类型的变量转成子类类型
//强制转型可能会出现逻辑错误!!!
//对象的强制转型,一定是在前面某个地方使用了自动转型
UNStudent stu3 = (UNStudent)stu2;
此时将父类转变成子类,肯定会有一部分产生丢失。
强制转型语法 某一个子类 变量名= ( 某一个子类) 被声明属于父类的对象
3.对于子类特有的方法的调用
例如大学生要考四级,而普通学生不要考。可以定义:
public class UNStudent extends Student{
public void cet4(){
System.out.println(name+"在考试四级");
}
}
主类中可以:UNStudent stu1 = new UNStudent();
stu1.setName("吴杨");
stu1.cet4();
程序运行结果:吴杨在考试四级
但需要特别注意的是:当子类类型转变为父类类型时,通过父类类型的引用,只能调用已在父类中定义的方法,不能调用子类自己的方法,在java中子类只能继承一个父类,即单根继承
4.对于子类重写后的方法的调用
大学生虽然有学习方法,但与一般学生的学习方法应该是不一样的,我们有必要在UNStudent中对继承来的方法进行重写,保持方法的定义不变,但方法内部与父类不同。
例:
大学生类重写父类的方法
重写是指子类重新实现父类的方法,只能是方法体不一样
public void study(){
System.out.println(name+"是大学生,实行的是学分制学习");
}
5.方法重载与重写的理解,区别
重载是指在一个类中,同样的方法,但有不同的参数
public void study(){
System.out.println(name+"是大学生,实行的是学分制学习");
}
再加一个方法就是重载
public void study(s){
System.out.println(name+"是大学生,实行的是学分制学习");
}
重写
6.多态的理解
多态是指相同类型的对象调用相同的方法时,由于继承和重写机制,得到的结果不一定相同,只有运行时才知道是什么东西。
代码如下:再写一个ComStudent类:
public class ComStudent extends Student{
public void study(){
System.out.println("计算机专业学生,名字"+ getName());
}
}
public static void main(String [] args){
Student us=new UNStudent();
us.setName("是电气专业大学生");
Student cs=new ComStudent();
cs.setName("我是大学生");
Teacher tc=new Teacher();
//传入两个学生对象
tc.teacStu(us,cs);
}
这时,由于在UNStudent,ComStudent中,对方法study()的重写内容不同,所以最后肯定输出了不同的结果
分享到:
相关推荐
### JAVA中的继承学习总结 #### 一、Java中的继承概念 继承是面向对象编程(OOP)的一个核心概念,它使得我们可以定义一个类继承另一个类的字段和方法。这样做的好处是可以减少代码冗余,提高代码复用性。在Java中,...
### C#中的继承学习 #### 一、继承基础 在面向对象编程中,**继承**是一种重要的机制,它允许创建一个新类(称为派生类或子类),该类继承了现有类(称为基类或父类)的属性和行为。这种特性有助于代码的复用,...
下面是对"Java中类的继承学习小结"的详细讲解。 首先,类的继承使用关键字`extends`来实现。子类(也称为派生类)声明时,会指定一个父类(或超类): ```java public class DerivedClass extends BaseClass { //...
java继承学习教案.pptx
C++类和对象继承学习笔记 本文档主要讲解C++类和对象继承的基本语法和应用,通过继承技术减少重复代码,实现代码的重用和简洁。 继承是面向对象三大特性之一,用于描述类与类之间的特殊关系。例如,在实现网页中的...
传统文化的继承学习课程.pptx
在C#编程语言中,继承是面向对象编程的一个核心特性,它允许一个类(子类或派生类)从另一个类(父类或基类)继承属性和方法,从而实现代码的重用和扩展。本教程针对在校学生等初学者,旨在通过实例深入理解C#中的...
继承学习 天气质量分析和预测。将数据分为训练集和测试集,通过集成学习建立算法模型预测AQI值和质量等级。
在这个学习笔记中,我们将深入探讨 Swift 中类的继承机制,以及如何利用这一机制来构建可复用和可扩展的代码。 首先,Swift 中的类定义使用关键字 `class`。当一个类声明为另一个类的子类时,我们使用冒号(:)后跟...
以上内容详细介绍了MyBatis框架中的继承学习要点,涵盖了MyBatis的核心组件以及它们如何协同工作,希望对你在学习和使用MyBatis时有所帮助。通过不断地实践和研究源码,你将能更自如地驾驭这个强大的框架。
在这个"C#继承代码学习"资源中,作者分享了自己学习过程中的实践代码,旨在帮助初学者理解和掌握这一关键概念。 首先,让我们来看看继承的基本概念。在C#中,使用`:`符号来表示一个类是从另一个类继承的。例如,...
2. **教学要求**:继承学习周期为两年,期间要求继承人每周至少跟随指导老师学习一天,三年累计不少于150个工作日。同时,他们需要撰写学习心得,整理临床医案,发表论文,以反映指导老师的学术思想和技术专长。此外...
庞敬涛医师作为张双彦的继承人,具备扎实的中医临床技能,参与了名老中医学术经验的继承学习,并在国家级杂志上发表多篇论文。 【学术经验继承的目标与实施】 继承学术经验的工作目标是培养具有深厚中医理论基础、...
JavaScript继承是JavaScript面向对象编程的重要概念,它允许子类继承父类的属性和方法,从而实现代码的复用。在JavaScript中,由于没有传统的类,所以继承不是通过类来实现的,而是通过其他机制,如原型链继承和借用...
在"Python学习资料之继承"中,我们可以深入理解这一概念。 首先,让我们了解类的定义。在Python中,你可以通过关键字"class"来创建一个类。例如: ```python class ParentClass: def __init__(self): self....
Java继承和多态PPT教案学习 本PPT教案主要讲解了Java中的继承和多态机制,包括继承、里式代换原则、多态和动态绑定、方法重载、重载构造函数和方法覆盖等概念。 继承是面向对象编程的基本机制之一,允许一个类继承...
### C++继承初步学习 #### 一、继承与派生的概念 继承是C++中面向对象编程的一个核心特性,它允许我们基于现有的类来创建新的类,而不必完全重写代码。通过继承,一个类(派生类)可以从另一个类(基类)那里继承...