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. MySql c#通用类 转

    using System;using System.Data;using System.Configuration;using System.Collections.Generic;using Sys ...

  2. Java 精度控制

    四舍五入,保留两位小数 (找了很多种方法,都有问题,测试得出下面这种方式是可用的) String str="0.235"; String.format("%.2f&quo ...

  3. ios 指纹识别解锁

    :添加LocalAuthentication.framework框架 :实现过程 #import "ViewController.h" #import <LocalAuthe ...

  4. CSS的常用属性(一)

    文本属性 font-size: 16px 文字大小 font-weight: 700 文字粗细 值从100-900 (值为700看上去加粗了) 不推荐使用font-weight: bold font- ...

  5. Go中的main函数和init函数

    Go里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package main).这两个函数在定义时不能有任何的参数和返回值.虽然一个package里面可以 ...

  6. Azure Service Bus

    Azure Service Bus  是类似Rabbit的一个队列的应用. 找了两个基本的教程 First(但是这个,没有写怎么去链接账户)  Sec:这个有   Third(讲的也很好) Windo ...

  7. asp.net 后台注册脚本

    string myScript = "function ShowPanel() { $('.nav a[href=\"#" + PanelType.wenben.ToSt ...

  8. java多线线程停止正确方法

    //军队线程 //模拟作战双方的行为 public class ArmyRunnable implements Runnable { //volatile保证了线程可以正确的读取其他线程写入的值 // ...

  9. CNN结构:用于检测的CNN结构进化-一站式方法

    有兴趣查看原文:YOLO详解 人眼能够快速的检测和识别视野内的物体,基于Maar的视觉理论,视觉先识别出局部显著性的区块比如边缘和角点,然后综合这些信息完成整体描述,人眼逆向工程最相像的是DPM模型. ...

  10. css实现多行文字限制显示&编译失效解决方案

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...