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的使用)的更多相关文章

  1. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

  2. JAVA三大特性之二——继承

    很多人在学习了JAVA以后,都会了解这个概念,而且继承也会在以后的开发中经常用到,但对于JAVA的继承特性,很多人都了解的不够深入,不够完整,当然这其中包括我,所以我就想抽点时间来整理一下JAVA继承 ...

  3. php面向对象的三大特性——封装、继承、多态

    1.封装 目的:为了使类更加安全,类里面的成员变量对外界隐藏 做法: 1)将成员变量变成私有的: 2)在类中做方法间接访问成员变量: 3)在方法里面加控制条件. 例: class ren{ priva ...

  4. C#面向对象三大特性之二:继承

    面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低了耦合. 但在实际应用中,有好多对象具有相同或者相似的属性,比如有一个对象 果树 ...

  5. Java学习笔记十八:Java面向对象的三大特性之封装

    Java面向对象的三大特性之封装 一:面向对象的三大特性: 封装 继承 多态   二:封装的概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访 ...

  6. Java基础—面向对象的三大特性

    面向对象有三大特性分别是继承.封装和多态. (1)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类 ...

  7. Java学习笔记二十一:Java面向对象的三大特性之继承

    Java面向对象的三大特性之继承 一:继承的概念: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方 ...

  8. Python 面向对象(创建类和对象,面向对象的三大特性是指:封装、继承和多态,多态性)

    概念:                                                                                                 ...

  9. python基础学习Day17 面向对象的三大特性之继承、类与对象名称空间小试

    一.课前回顾 类:具有相同属性和方法的一类事物 实例化:类名() 过程: 开辟了一块内存空间 执行init方法 封装属性 自动的把self返回给实例化对象的地方 对象:实例 一个实实在在存在的实体 组 ...

随机推荐

  1. B - Substrings Sort

    Problem description You are given nn strings. Each string consists of lowercase English letters. Rea ...

  2. C - Crazy Town

    Problem description Crazy Town is a plane on which there are n infinite line roads. Each road is def ...

  3. android黑科技系列——Xposed框架实现拦截系统方法详解

    一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...

  4. php加密方法有哪些

    1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 参数 str -- 原始字符串. raw_output -- 如果可 ...

  5. [Advanced Algorithm] - Inventory Update

    题目 依照一个存着新进货物的二维数组,更新存着现有库存(在 arr1 中)的二维数组. 如果货物已存在则更新数量 . 如果没有对应货物则把其加入到数组中,更新最新的数量. 返回当前的库存数组,且按货物 ...

  6. 编程领域中的 "transparent" 和 "opaque"

    引言 在学习计算机的过程中,经常会接触到 “透明” 和 “非透明” 的概念. 刚开始理解 “透明” 这个概念的时候,认为 “透明” 就是程序员可以看见其中的构造,但是老师却说透明是程序员意识不到其中的 ...

  7. swift里 as、as!、as?区别 T.Type与动态类型

    as 1.编译器进行类型转换合法性检查:静态 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: shoppingLi ...

  8. 怎么在阿里云搭建一个WordPress博客(超详细教程)

    想以正确的方式启动一个 WordPress 博客吗?我知道,这可能是一个令人恐惧的想法 -- 其实你并不孤单.但是,在帮助很多用户创建博客之后,我决定编写一份详细的指南,让任何没有技术知识的人都能拥有 ...

  9. PAT_A1110#Complete Binary Tree

    Source: PAT A1110 Complete Binary Tree (25 分) Description: Given a tree, you are supposed to tell if ...

  10. <a>标签中的href伪协议 标签: html 2016-12-24 22:38 365人阅读 评论(0)

    <a id="jsPswEdit" class="set-item" href="javascript:;">修改密码</ ...