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. IDA逆向常用宏定义

    /* This file contains definitions used by the Hex-Rays decompiler output. It has type definitions an ...

  2. 【专题】概率期望DP

    11.22:保持更新状态:主要发一些相关的题目和个人理解 (P.S.如果觉得简单,可以直接看后面的题目) upd 11.30 更完了 [NO.1] UVA12230 Crossing Rivers  ...

  3. AES && DES加解密

    MD5加密一般不可逆,只能暴力突破.所以这边记录一下一些关于字符串的加解密的两种方法,以便自己学习 AES public class AESHelper { public static string ...

  4. font使用

    font连写属性 font-style  font-variant font-weight  font-size/line-height  font-family font-size与font-fam ...

  5. JavaScript(基于react+dva)

    变量声明 const 和 let:分别表示常量和变量 模板字符串 const user = 'world'; console.log(`hello ${user}`); // hello world ...

  6. YOLO训练Pedestrain

    Pedestrain dl  使用darknet训练: 1. Inria 创建 yolo-inria.cfg 从cfg/yolo-voc.2.0.cfg拷贝一份,修改batch=64, subdivi ...

  7. 国内DNS服务器地址

    114DNS114.114.114.114114.114.115.115 腾讯119.29.29.29 百度180.76.76.76 阿里223.5.5.5223.6.6.6 [THE END]

  8. sql server 游标fetch简单用法

    //遍历tmp_check的年份和月份 DECLARE @year ) DECLARE @month ) DECLARE cur CURSOR FOR SELECT nf,yf FROM tmp_ch ...

  9. java中的位运算及移位运算

    为了方便对二进制位进行操作,Java给我们提供了以下四个二进制位操作符: &    按位与 |     按位或 ^    按位异或 ~    按位取反 Java中有三个移位运算符: 左移:&l ...

  10. 【sqli-labs】 less11 POST - Error Based - Single quotes- String (基于错误的POST单引号字符型注入)

    查看源码,用户名和密码通过post提交 加单引号提交 出现报错,推测对应的SQL语句 , 直接使用or构造永真登录 成功,注意此处登录的用户为表中的第一个用户 需要改变用户可以通过改变筛选条件实现 作 ...