继承

概念:

①   继承背后的思想就是基于已存在的类来构建新类;

②   当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求;

③   当从其它类导出的类叫作子类,被导出的类叫作父类;

④   在Java中,除了Object类外,所有类都是子类,都有唯一父类;

⑤   继承在OO中不可或缺;

⑥   创建一个类时,总是在继承;

类之间关系:Is-a继承体现,Has-a组合体现,Like-a实现接口体现;

继承的意义:代码重用,体现不同抽象层次;

父子类关系:父类更抽象,更一般;子类更具体,更特殊;

继承的特点:1、子类继承父类的成员;2、具有层次结构;

继承的优点:1、代码重用;2、父类字段和方法可用于子类;3、从抽象到具体形成类的结构体系;4、可轻松定义子类;

实现:

在Java中,用extends关键字来表示一个类继承了另一个类;

public class Teacher extends Person{

//代码

}

super关键字

特点:

①   Super代表父类对象的引用,this代表当前对象的引用;

②   当子父类的成员出现重名时,可以通过super来进行区分;

③   子类的构造方法中,通过super关键字调用父类的构造方法;

public class JavaTeacher extends Teacher(){

public JavaTeacher(String name,String school){

//通过调用父类的构造方法,完成对相关字段值的初始化

      super(name,school);

    }

}

☆当构造一个类对象的时候一定会先调用父类的构造方法来构造父类的对象,调用父类的构造方法的语句必须是子类构造方法中的第一条指令;

 public class TeacherDemo{
public static void main(String []args){
B b=new B(); //父类中加上showB()方法之后,调用的是子类的showB(); //若要调用父类的showB();在子类中加上super.showB();
b.showB();
}
} class A{
public A(){
System.out.println("A的构造方法");
}
public void showA(){
System.out.println("A");
} public void showB(){
System.out.println("父类中的showB方法");
}
} class B extends A{
public B(){
//super();//调用父类无参的构造方法,可以省略
System.out.println("B的构造方法");
} public void showB(){
System.out.println("B");
//showA();//子类继承父类,可以调用,同super.showA(); 因为名称未冲突
super.showB(); }
}

下面这份代码更清晰的表达了继承

 public class TeacherDemo{
public static void main(String []args){
JavaTeacher jTeacher=new JavaTeacher("张三","清华");
jTeacher.teaching(); DBTeacher dTeacher=new DBTeacher("李四","清华");
dTeacher.teaching();
}
} class Teacher{
private String name;
private String school; public Teacher(String name,String school){
this.name=name;
this.school=school;
} public void teaching(){
System.out.println("授课前准备");
}
} class JavaTeacher extends Teacher{
public JavaTeacher(String name,String school){
super(name,school);
} public void teaching(){
super.teaching();//调用父类teaching
System.out.println("打开eclipse");
System.out.println("书写java代码");
}
} class DBTeacher extends Teacher{
public DBTeacher(String name,String school){
super(name,school);
} public void teaching(){
super.teaching();//调用父类teaching
System.out.println("打开Oracle");
System.out.println("书写pl-sql指令");
}
}

 final关键字

①   final可以用来修饰变量、方法、类;

②   final修饰的变量是一个常量,一旦赋了值就不能在修改。(常量一般都和static关键字配合使用);

③   final修饰类代表此类不能被继承;

④   final修饰方法代表此类方法不能被重写;

showNumber2未加final前

 public class FinalDemo{
public static void main(String []args){
A a=new A();
a.showNumber1(); B b=new B();
b.showNumber2();
}
} class A{
public final int number1=1;//常量
public int number2=2;
public void showNumber1(){
//number1++;//不能被修改
System.out.println(number1);
}
public void showNumber2(){
System.out.println(number2);
}
} class B extends A{
public void showNumber2(){
System.out.println(number2);
}
}

在A中的showNumber2方法中加上final报错

在A类前加上final也会报错

final用在引用变量上,代表次引用变量只能引用刚一开始所引用的变量,中途不能改变指向

 public class FinalDemo{
public static void main(String []args){
A a=new A();
a.showNumber1(); B b=new B();
b.showNumber2(); //可以修改
final A a2=new A();
a2.number2=5;
a2.showNumber2();//打印5 /*a2=new A();*/ //final用在引用变量上,代表次引用变量只能引用刚一开始所引用的变量,中途不能改变指向
}
} //常量类不能被继承
/*final*/ class A{
public final int number1=1;//常量
public int number2=2;
public void showNumber1(){
//number1++;//不能被修改
System.out.println(number1);
}
//子类不能对父类中的常量方法进行改写(重写)
public /*final*/ void showNumber2(){
System.out.println(number2);
}
} class B extends A{
public void showNumber2(){
System.out.println(number2);
}
}

Object类常见方法

Java中,所有类都直接或间接继承自java.lang.Object类,可以说Object是java中所有类的祖先即根类;

Java中任何类都继承了Object类中的方法,只要有toString(),equals(),hashcode(),clone(),getClass(),finalizw()

String toString()

①   返回该对象的字符串描述性信息。默认输出的格式是:类名[字段值,字段值…];

②   只要对象与一个字符串通过“+”连接,系统就自动调用toString()以获得对象的字符串描述;

③   常被改写,可以根据用户的需求对其进行重写;

boolean equals()

①   Object类原始功能是实现判断两个对象是否具有相同引用;要求判断两个对象状态的相等性;

②   在jdk标准库中提供了一些类,比如String,Date都对equals方法进行了重写;

③   常被改写,可以根据用户的需求对其进行重写;

 public class ObjectDemo{
public static void main(String []args){
Student stu1=new Student("张三",20);
System.out.println(stu1);//打印对象 输出Student@2a139a55 @之前是类名,之后是哈希码(可以认为是堆内存中的地址) System.out.println(stu1.toString());
//未重写toString()之前 输出与以上内容相同,但Student中未编写toString()方法,
//也可以使用是因为它默认继承了Object类,该类中有toString()方法
//重写toString()之后,输出内容为重写之后的内容 Student stu2=new Student("张三",20); //未重写equals()方法之前
System.out.println(stu2.equals(stu1));//输出false,不是指向同一个对象
System.out.println(stu2.equals(stu2));//输出true
//重写equals方法之后,如下则全部输出true
}
} //加上与不加上继承Object是一样的,默认就会继承
class Student /*extends Object*/{
private String name;
private int age; public Student(String name,int age){
this.name=name;
this.age=age;
} //重写Object中的toStirng()方法
public String toString(){
return "姓名:"+name+",年龄:"+age;
} //重写equals方法
public boolean equals(Object obj){
//自己与自己比
if(this==obj){
return true;
}
if(obj==null)
{
return false;
}
if(this.getClass()!=obj.getClass())
{
return false;
} Student stu=(Student)obj;
if(this.age!=stu.age)
{
return false;
}
if(this.name==null)
{
if(stu.name!=null)
{
return false;
}
}
else if(!this.name.equals(stu.name)){
return false;
} return true;
}
}

面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法的更多相关文章

  1. 面向对象编程(二)封装--构造方法,this关键字,static关键字,方法重载

    面向对象三大特点:封装.继承.多态 封装概念 ①   将东西包装在一起,然后以新的完整形式呈现出来: 将方法和字段一起包装到一个单元中,单元以类的形式实现; ②   信息隐藏,隐藏对象的实现细节,不让 ...

  2. super和final关键字

    一.super关键字 super关键字的使用 JAVA类中使用super来引用父类的属性或者方法,用this来引用当前对象,主要用法: 1.子类的构造函数默认第一行会默认调用父类的无参数构造函数 2. ...

  3. 面向对象编程(十)——继承之Super关键字及内存分析

    Super关键字

  4. 廖雪峰Java2面向对象编程-3继承和多态-1继承

    1.继承 继承是一种代码复用的方式. Student与Person有相同部分的代码. Student可以从Person继承,这样Student获得了Person的所有功能,只需要编写新增的功能即可.通 ...

  5. Python(面向对象编程——2 继承、派生、组合、抽象类)

    继承与派生 ''' 继承:属于 组合:包含 一. 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称 ...

  6. java 之 继承 super关键籽 this关键字 final关键字

    继承 语法: 使用 extends 来继承 class子类    extends父类{ 子类属性 子类方法 } 继承的特点: 1.子类会把父类所有的属性和方法继承下来,final修饰的类是不可以被继承 ...

  7. Python入门之面向对象编程(四)Python描述器详解

    本文分为如下部分 引言——用@property批量使用的例子来引出描述器的功能 描述器的基本理论及简单实例 描述器的调用机制 描述器的细节 实例方法.静态方法和类方法的描述器原理 property装饰 ...

  8. 乐字节Java继承|方法重写、super和final关键字

    大家好,乐字节的小乐又来了,上一篇是:乐字节Java|JavaBean.继承与权限修饰,也是属于Java继承的,今天继续Java继承. 一. 方法的重写 父类不满足子类的要求,按需改写.注意 方法签名 ...

  9. Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)

    继承: 1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模. 2.提高代码的复用性. 3.extends(扩展),子类是父类的扩展. 4.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...

随机推荐

  1. 【LeetCode】2.Add Two Numbers 链表数相加

    题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...

  2. Lua与游戏的不解之缘

    本文转载自秦元培博客:blog.csdn.net/qinyuanpei 一.什么是Lua? Lua 是一个小巧的脚本语言,巴西里约热内卢天主教大学里的一个研究小组于1993年开发,其设计目的是为了嵌入 ...

  3. 如何从Ubuntu 16.04 LTS升级到Ubuntu 18.04 LTS

    可以说非常简单(假设过程顺利!!) 您只需打开Software&Update,进入"Updates"选项卡,然后从“有新版本时通知我”下拉菜单中选择“适用长期支持版”选项. ...

  4. groupmod - 修 改 群 组

    总览 SYNOPSIS groupmod [-g gid [-o]] [-n group_name ] group 描述 DESCRIPTION groupmod 命 令 会 参 照 你 命 令 列 ...

  5. pycharm创建工程的两种形式:virtualenv环境和系统默认编译器

    转自:http://swiftlet.net/archives/3151 pycharm创建工程的时候可以选择编译器,如下图所示: 上图表示创建工程有两种方式:第一种是利用:virtualenv,第二 ...

  6. Python01 VSCode开发环境和入门程序

    1.Python的下载和安装 最新版本python3.7.3 https://www.python.org/downloads/release/python-373/ web-based: 在线安装包 ...

  7. sqlite 新建实体时出错

    解决方式 手动下载 问题原因

  8. jquery的正则表达式

    正则表达式 位置: ^      开头 $      结尾 次数: *      0或多个 +      1或多个 ?      0或1个 {n}     就是n个 {n,}   至少n个 {n,m} ...

  9. BZOJ-1833(数位DP)

    #include <bits/stdc++.h> using namespace std; typedef long long ll; ll a,b; int k[20]; ll dp[2 ...

  10. Mysql数据库插入中文出现乱码相关

    查看数据库编码的命令:show variables like "character%"; mysql> show variables like "character ...