文档章节

面向对象继承

stars永恒
 stars永恒
发布于 01/22 21:47
字数 2182
阅读 2
收藏 0

第1章 面向对象

1.1 知识回顾

1.Java中的数据类型
2.引用数据类型String中的方法
3.IO流_读写文件

1.2 面向对象概念回顾

什么叫面向对象编程?有人是这么理解的

也有人说不对,面向对象编程是你要编程你对象也要编程.

面向对象简称:“OOP” 面向对象编程

使用类映射现实生活中的事物,其功能封装为方法,属性封装为成员变量。
一个类拥有的成员包括:
成员变量
构造方法
普通方法
getters/setters

如一个Person类的定义:
class Person{
private String name;
private int age;

public Person(){}
public Person(String name,int age) {
    this.name = name;
    this.age = age;

}

public void showName() {
    System.out.println(this.name);
}
set/get方法

}

1.3 对象的内存解释

对象在内存中的位置:
对象由new关键字创建,如同数组,实体存在于堆内存中
任何事物均可以定义成类,创建对象,属于引用类型
而对象的引用变量是一个普通变量。存储的值是该对象堆内存中的地址。

基本类型赋值代码解释

基本类型赋值对应内存图

引用类型赋值代码解释

引用类型赋值对应内存图

1.4 this关键字概念

this一般出现在类的一个方法当中,代表当前对象的引用。我们通常用其将本对象中的成员与其他作用域区分开来。
我们用代码回顾一下 this关键字的作用,用来区分成员变量和局部变量同名情况
当一个类定义好之后,如果不创建对象this是没有意义的。
一个类可以有多个对象。每个对象都有各自的属性值,各个对象的方法均是类中定义的那个方法逻辑。定义中的this就代表调用方法的这个对象。

1.5 匿名对象

1.5.1 匿名对象的概念
匿名: 不露身分、个人特征或不说明是什么人物
生活中有哪些匿名案例?
匿名账号

匿名举报

匿名对象

匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。
如:已经存在的类:
public class Person{
public void eat(){
System.out.println();
}
}

创建一个普通对象
Person p = new Person();
创建一个匿名对象
new Person();

1.5.2 匿名对象的特点

 创建匿名对象直接使用,没有变量名。
new Person().eat() //eat方法被一个没有名字的Person对象调用了。

 匿名对象在没有指定其引用变量时,只能使用一次。
new Person().eat(); 创建一个匿名对象,调用eat方法
new Person().eat(); 想再次调用eat方法,重新创建了一个匿名对象

 匿名对象可以作为方法接收的参数、方法返回值使用

class Demo {
    publicstatic Person getPerson(){
        //普通方式
        //Person p = new Person();  
        //return p;

        //匿名对象作为方法返回值
        returnnew Person(); 
    }

    publicstaticvoid method(Person p){}
}

class Test {
    publicstaticvoid main(String[] args) {
        //调用getPerson方法,得到一个Person对象
        Person person = Demo.getPerson();

        //调用method方法
        Demo.method(person);
        //匿名对象作为方法接收的参数
        Demo.method(new Person());
    }
}

第2章 继承

2.1 继承

2.1.1 继承的概念

什么叫继承? 他是面向对象的三大特征之一
现实生活中的继承 QQ:5位 12345

在现实生活中,继承一般指的是子女继承父辈的财产。

在程序中,继承描述的是类与类之间的关系,通过继承可以多个类之间形成一种关系体系。例如学校中的讲师、助教、班主任都属于员工。这些员工之间会形成一个继承体系,具体如下图所示。

图1-1 员工继承关系图
在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,
继承后子类的特点:
子类会自动拥有父类所有可继承的属性和方法。

思考:
现实生活中还有哪些继承的例子?

2.1.2 继承的定义及使用格式
在程序中,如果想声明一个类继承另一个类,需要使用extends关键字。
格式:
class 子类 extends 父类 {}
接下来通过一个案例来学习子类是如何继承父类的,如下所示。Example01.java

/*
 * 定义员工类Employee
 */
class Employee {
    String name; // 定义name属性
    // 定义员工的工作方法
    publicvoid work() {
        System.out.println("尽心尽力地工作");
    }
}

/*
 * 定义讲师类Teacher 继承 员工类Employee
 */
classTeacherextends Employee {
    // 定义一个打印name的方法
    publicvoid printName() {
        System.out.println("name=" + name);
    }
}

/*
 * 定义测试类
 */
publicclass Example01 {
    publicstaticvoid main(String[] args{
        Teachert = newTeacher (); // 创建一个讲师类对象
        t.name = "小明"// 为该员工类的name属性进行赋值
        t.printName(); // 调用该员工的printName()方法
        t.work(); // 调用Developer类继承来的work()方法
    }
}

运行结果如下图所示。


图1-2 运行结果
在上述代码中,Teacher类通过extends关键字继承了Employee类,这样Teacher类便是Employee类的子类。从运行结果不难看出,子类虽然没有定义name属性和work()方法,但是却能访问这两个成员。这就说明,子类在继承父类的时候,会自动拥有父类的成员。
小结:
继承是面向对象的核心特性,是面向对象的学习重点。
继承是代码复用的重要方式,是类与类之间的一种关系。

 

继承的注意事项:
1.继承必须合理性:(人是人他妈生的 妖是妖他妈生的)
从类与类之间的设计关系来看,子类必须属于父类的一种时 is a,才会继承。
2.父类中成员是共性的内容
父类抽取出了共性的内容,子类可以在父类基础上扩展新的属性与行为。
3.子类自动拥有父类的成员并且可以直接使用非私有的父类成员。

2.2 继承-子类中访问父类成员变量特点

了解了继承给我们带来的好处,提高了代码的复用性。继承让类与类或者说对象与对象之间产生了关系。那么,当继承出现后,类的成员之间产生了那些变化呢?
类的成员重点学习成员变量、成员方法的变化。
成员变量:如果子类父类中出现不同名的成员变量,这时的访问是没有任何问题。
看如下代码:

class Fu
{
    //Fu中的成员变量。
    int num = 5;
}
class Zi extends Fu
{
    //Zi中的成员变量
    int num2 = 6;
    //Zi中的成员方法
    public void show()
    {
        //访问父类中的num
        System.out.println("Fu num="+num);
        //访问子类中的num2
        System.out.println("Zi num2="+num2);
    }
}
class Demo 
{
    public static void main(String[] args) 
    {
        Zi z = new Zi(); //创建子类对象
//System.out.println(z.num1);
        //z.show(); //调用子类中的show方法
    }
}

代码说明:Fu类中的成员变量是非私有的,子类中可以直接访问,若Fu类中的成员变量私有了,子类是不能直接访问的。

2.3 继承-子类中访问父类成员方法特点

 子父类中成员方法的特点
当在程序中通过对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。
看如下代码:

class Fu{
    public void show(){
        System.out.println("Fu类中的show方法执行");
    }
}
class Zi extends Fu{
    public void show2(){
        System.out.println("Zi类中的show2方法执行");
    }
}
public  class Test{
    public static void main(String[] args{
        Zi z = new Zi();
        z.show(); //子类中没有show方法,但是可以找到父类方法去执行
        z.show2();
    }
}

2.3.1 继承特点
1.Java只支持单继承:就一个子类 只能最多直接继承一个父类

2.Java支持多层继承:

3.父类定义了继承树中共性内容,子类定义了该类个性内容。
说明:在以后的开发过程中
我们学习了多态后,要结合多态,能使用父类时尽量使用父类,提高程序扩展性。

© 著作权归作者所有

共有 人打赏支持
下一篇: 多表查询
stars永恒
粉丝 10
博文 168
码字总数 221677
作品 0
大兴
后端工程师
私信 提问
谈谈你对面向对象的理解

Question:请你谈一下面向对象? Answer: 面向对象是相对于面向过程而言的。面向过程语言是一种基于功能分析的、以算法为中心的程序设计方法;而面向对象是一种基于结构分析的、以数据为中心...

DevShaw
2016/01/12
640
0
Python基础6-1 面向对象编程

概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过...

jinmy001
2017/07/21
0
0
java基础重点讲解,看了还不会找我(八)

###08.01面向对象(代码块的概述和分类)(了解)(面试的时候会问,开发不用或者很少用) A:代码块概述 在Java中,使用{}括起来的代码被称为代码块。 B:代码块分类 根据其位置和声明的不同,可以分...

谢小芳是女神
2018/12/30
0
0
Python-面向对象

(个人感觉真心不错 ,转过来一起学习一下 ) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分...

ala9981
2016/03/20
0
0
黑马程序员.bobo.DAY.7

Day-7 1.面向对象(继承-概述) /* 将学生和工人的共性描述提取出来,单独进行描述,只要让学生和公认与当杜描述的这个类有关系,就可以 继承:1,提高了代码的复用性.2,让类与类之间产生了关系,才有...

BobbyLou
2015/05/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Objective-C中的associated object释放时机问题

如果对象A持有对象B,B作为A的associated object,并且表面上B没有其他被强引用的地方,那么对象A被释放时,对象B一定会同时释放吗?大部分情况下是,但真有不是的时候。最近实现代码的时候不...

阿里云官方博客
27分钟前
1
0
12_第一个Flutter程序

使用 package 在这一步中,你将开始使用一个名为 english_words 的开源软件包,其中包含数千个最常用的英文单词以及一些实用功能。 你可以 在 pub.dartlang.org 上找到 english_words 软件包...

口十耳
55分钟前
7
0
【Maven冷知识】Compiler插件

很多同学在pom的配置中都喜欢加上这样一段配置信息: 从配置信息上看,这是maven对Java源代码进行的编译配置,采用了Java 7 进行编译,但是为什么要加上这段配置呢?不加有没有什么影响?很多...

算法与编程之美
今天
2
0
磊哥测评之数据库SaaS篇:腾讯云控制台、DMC和小程序

本文由云+社区发表 作者:腾讯云数据库 随着云计算和数据库技术的发展,数据库正在变得越来越强大。数据库的性能如处理速度、对高并发的支持在节节攀升,同时分布式、实时的数据分析、兼容主...

腾讯云加社区
今天
2
0
Visual Studio系列教程:使用XAML工具创建用户界面(二)

Visual Studio是一款完备的工具和服务,可帮助您为Microsoft平台和其他平台创建各种各样的应用程序。在本系列教程中将介绍如何为图像编辑创建基本的用户界面,有任何建议或提示请在下方评论区...

ymy_666666
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部