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. Redis(四)-配置

    Redis 配置 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf. 你可以通过 CONFIG 命令查看或设置配置项. 语法 Redis CONFIG 命令格式如下: ...

  2. IDA逆向常用宏定义

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

  3. POJ 2945 trie树

    Find the Clones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7704 Accepted: 2879 Descr ...

  4. C - cAPS lOCK

    Problem description wHAT DO WE NEED cAPS LOCK FOR? Caps lock is a computer keyboard key. Pressing it ...

  5. 最近积累的JS 东西,分享一下

    js 关闭页面 var browserName=navigator.appName; if (browserName=="Netscape") { window.open('',' ...

  6. font使用

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

  7. Spring logger 配置

    1. logback-spring.xml <?xml version="1.0" encoding="UTF-8"?> <configura ...

  8. 关于php初学者的理解!请大家浏览并指出不足!谢谢!

    昨天开始学习php,由于之前是学习.NET的,刚接触php,就关于语法就是各种不适应,什么js,jq在脑子里一团浆糊..过了一天感觉好了点,现在有点想法,大家欢迎交流批评! 今天用php做了个登录,判 ...

  9. jQuery顺序加载图片(初版)

    浏览器加载图片区别: IE:同时加载与渲染 其他:加载完之后再渲染 根据这个差异用jQuery做个实例:按顺序加载一组图片,加载完成后提示. <!DOCTYPE html> <htm ...

  10. Visual Studio UI Automation 学习(二)

    今天恰好有时间,继续学习了一下UI Automation的知识.看了两篇博客,对UI Automation有了进一步的了解. https://blog.csdn.net/qq_37546891/art ...