面向对象的三大特性之二——继承(含super的使用)
1.继承的语法:class 子类 extends 父类
例1:
class Person
{
int age;
String name;
public void print1()
{
System.out.println("我叫"+name+",今年"+age+"岁。");
}
}
class Student extends Person
{
String school;
Student(int age,String name,String school)
{
this.age=age;
this.name=name;
this.school=school;
}
public void print2()
{
System.out.println("我在"+school+"读书。");
}
}
public class T02
{
public static void main(String[] args)
{
Student s = new Student(21,"Mary","黑龙江科技大学");
s.print1();
s.print2();
}
}
2.Java中是单继承的,不允许多重继承,但可以使用多层继承。
即:一个类C只能有一个父类B,类C对类B是单继承的;而类B只有一个父类A,那么类C对类A就是多层继承。
class A
{}
class B extends A
{}
class C extends B
{}
3.Java继承只能直接继承父类中的公有属性和公有方法,而隐含的继承了私有属性或私有方法。
修改例1,得到例2:
class Person
{
private int age;
String name;
public void setAge(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
public void print1()
{
System.out.println("我叫"+name+",今年"+age+"岁。");
}
}
class Student extends Person
{
String school;
Student(String name,String school)
{
//setAge(21);//也可以出现在这里,道理同下
this.name=name;
this.school=school;
}
public void print2()
{
print1();
System.out.println("我在"+school+"读书。");
}
}
public class T02
{
public static void main(String[] args)
{
Student s = new Student("Mary","黑龙江科技大学");
s.setAge(21);
s.print2();
}
}
从上面例子看出,子类对父类中私有属性的调用,要借助setter()和getter()方法。即,我们可以通过父类的公有方法(包括构造方法)来访问父类的私有数据成员。
4.被final修饰的类不能被继承。
5.super关键字的使用。
在上述例1的继承中,在初始化对象的时候,会默认先调用父类的无参构造方法,然后再调用子类的构造方法。事实上是子类构造方法的首行隐含了一个“super();”语句。下面调用父类有参构造函数来体现super的使用:
class Person
{
int age;
String name;
Person(int age,String name)
{
this.age=age;
this.name=name;
}
public void print1()
{
System.out.println("我叫"+name+",今年"+age+"岁。");
}
}
class Student extends Person
{
String school;
Student(int age,String name,String school)
{
super(age,name);//必须写在第一行,否则不能编译通过
this.school=school;
}
public void print2()
{
System.out.println("我在"+school+"读书。");
}
}
public class T02
{
public static void main(String[] args)
{
Student s = new Student(21,"Mary","黑龙江科技大学");
s.print1();
s.print2();
}
}
事实上,super关键字的作用就是调用父类中的属性和方法(包含构造方法)。除特殊需求外,大多数情况是隐式使用,有时候作为和this共同出现区别子类属性(方法)和父类属性(方法)。
Student(int age,String name,String school)
{
super.age=age;//父类属性
super.name=name;//父类属性
this.school=school;//子类属性
}
6.方法的重写:子类中的方法和父类中的方法的名称、参数个数和类型、返回值类型等都完全一致时,就称子类中的方法重写了父类中的方法。
class Father
{
public void speak()
{
System.out.println("我叫Tom,我是Alan的父亲。");
}
}
class Son extends Father
{
public void speak()
{
System.out.println("我叫Alan,我是Tom的儿子。");
}
}
public class T02
{
public static void main(String[] args)
{
Son p = new Son();
p.speak();
}
}
输出结果:我叫Alan,我是Tom的儿子。
重写中需要注意的问题:被重写的方法不能为static;子类的访问权限要大于等于父类。
面向对象的三大特性之二——继承(含super的使用)的更多相关文章
- Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)
Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...
- JAVA三大特性之二——继承
很多人在学习了JAVA以后,都会了解这个概念,而且继承也会在以后的开发中经常用到,但对于JAVA的继承特性,很多人都了解的不够深入,不够完整,当然这其中包括我,所以我就想抽点时间来整理一下JAVA继承 ...
- php面向对象的三大特性——封装、继承、多态
1.封装 目的:为了使类更加安全,类里面的成员变量对外界隐藏 做法: 1)将成员变量变成私有的: 2)在类中做方法间接访问成员变量: 3)在方法里面加控制条件. 例: class ren{ priva ...
- C#面向对象三大特性之二:继承
面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低了耦合. 但在实际应用中,有好多对象具有相同或者相似的属性,比如有一个对象 果树 ...
- Java学习笔记十八:Java面向对象的三大特性之封装
Java面向对象的三大特性之封装 一:面向对象的三大特性: 封装 继承 多态 二:封装的概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访 ...
- Java基础—面向对象的三大特性
面向对象有三大特性分别是继承.封装和多态. (1)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类 ...
- Java学习笔记二十一:Java面向对象的三大特性之继承
Java面向对象的三大特性之继承 一:继承的概念: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方 ...
- Python 面向对象(创建类和对象,面向对象的三大特性是指:封装、继承和多态,多态性)
概念: ...
- python基础学习Day17 面向对象的三大特性之继承、类与对象名称空间小试
一.课前回顾 类:具有相同属性和方法的一类事物 实例化:类名() 过程: 开辟了一块内存空间 执行init方法 封装属性 自动的把self返回给实例化对象的地方 对象:实例 一个实实在在存在的实体 组 ...
随机推荐
- IDEA 使用 git (码市)
1.下载 git,并安装(一直下一步) 2.使用IDEA,检出项目,检出方式选择:git, 3.如果项目有修改,上传修改的文件 4.下载 SourceTree(git的图形化工具),并安装(一直下一步 ...
- Lua eval实现
因为loadstring总是在全局环境中编译它的串,所以编译出的函数访问的变量是全局变量.为了避免污染全局环境我们需要用setfenv修改函数的环境 function eval(equation, v ...
- jQuery学习笔记之插件开发(4)
jQuery学习笔记之插件开发(4) github源码地址 插件:了让原有功能的增强. 1.插件的种类(3种):局部.全局.选择器插件 1.1封装对象方法的插件 这种类型的插件是把一些常用或者重复使用 ...
- mysql主从不同步,提示更新找不到记录
查看丛库状态show slave status\G 从库原文提示:Last_Error: Coordinator stopped because there were error(s) in the ...
- JavaScript自动计算价格和全选
JavaScript自动计算价格和全选,价格自增加减,复选框,反选,全选. 如图: 如图: CSS代码 @charset "gb2312"; /* CSS Document */ ...
- 深圳面试一周记录——.NET(B/S)开发
个人简单信息:2011年毕业,最高学历大专,最近一份工作在广州:有做架构设计经验,有一年的带团队(10人左右)经验:互联网和行业软件公司都待过. 为免不必要的争论,本文说地址的就不说公司行业,说公司行 ...
- (转)基于openlayers实现聚类统计展示
http://blog.csdn.net/gisshixisheng/article/details/46137015 概述: 在前面的博文中讲述过基于Arcgis for js如何实现聚类统计展示, ...
- js遍历对象属性
对象虽然与数组一样,都是数据的集合. 因为对象中的数据是处于无序状态,不能像数组那样,使用下标来遍历对象的所有属性. 如果要遍历对象属性,就必须要使用for in 语句. var a={ A1=180 ...
- 触发a标签
var aLink = document.createElement("a"); aLink.download = ''; aLink.href = url; if (docume ...
- Oracle经验积累
Oracle 常用Funtion ----行转列 开始---- select u_id, wmsys.wm_concat(goods) goods_sum from shopping group by ...