1.面向对象概述

1.1.类与对象的关系

有对象吗,没有的话我给你new一个!

对象顾名思义就是一个个的个体,当所有的个体,例如人的总称为人类,这一类的生物或者物品。人类是对人这种个体的抽象化,不会说你是个人类,而是说你是个人,所以人就是人类的具体实现。

简而言之,类是对象的抽象化,对象是类的具体实现。

正所谓Java主打的万物皆对象。

public class Person{
private String name;
private int age;
private String gender; public Person(String name, int age, String gender){
this.name = name;
this.age = age;
this.gender = gender;
} public void say(){
System.out.println("hello");
} public static void main(String[] args){
Person p = new Person("张三", "22", "男");
p.say();
}
}

在上面代码中,类Person就是人的一种抽象化,每个人都有姓名、年龄、性别等属性和一些动作,比如说等。在main方法中我们使用关键字new将类具体化为一个对象,这个对象名张三、22岁、男性,并且说了hello。

1.2.类的具体描述

类Person中有属性name、age、gender等,方法say等。还有个比较特殊的方法public Person(...),这个方法就是类的构造器。

构造方法又成为构造器,和一般的方法不同的是:

  • 没有返回值(没有返回类型,也没有void)
  • 方法名和类名一样

一个类可以有多个构造方法,这是后面要说到的重载。

2.面向对象的三大特性

面向对象程序设计的优点:

  • 可扩展
  • 可重用

缺点:

  • 复杂程度较高

2.1.继承

继承就是子类继承父类的特征和行为,得到父类的实例变量和方法。例如猫和狗都是动物,可以继承动物的一些通用特征和行为。

为什么需要继承?

如果没有继承,当我们写猫和狗的类时:

public class Cat {
private String name;
private int age;
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println(name+"吃东西");
}
public void sleep() {
System.out.println(name+"睡觉");
}
}
public class Dog {
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println(name+"吃东西");
}
public void sleep() {
System.out.println(name+"睡觉");
}
}

发现我们写了很多重用的代码,比如属性name、age和方法eat、sleep等。

如果使用继承代码将变成怎么样呢?

public class Animal {
private String name;
private int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println(name+"吃东西");
}
public void sleep() {
System.out.println(name+"睡觉");
}
}
public class Cat extends Animal {
public Cat(String name, int age) {
super(name, age);
}
}
public class Dog extends Animal {
public Dog(String name, int age) {
super(name, age);
}
}

我们发现只需要写一个父类,子类就具有父类的属性和方法了,这样我们就不需要写那么多重复的代码了,提高了代码的复用性。

总结以下:

  • 子类拥有父类的非private的属性、方法,这里private之前说过,所修饰的只能在同一个类中可见
  • 子类可以对父类进行扩展
  • 子类可以重写父类的方法
  • Java中不支持多继承

重写和重载:

  • 重写(override):猫和鱼都继承了动物类,如果动物类有一个方法叫run(),对于猫来说使用四肢奔跑,对于鱼来说使用鱼鳍游动。这时我们需要重写父类的方法:
public class Person {
public void run() {
System.out.println("动物跑起来了");
}
} public class Cat {
@Override
public void run() {
System.out.println("猫跑起来了");
}
} public class Fish {
@Override
public void run() {
System.out.println("鱼游起来了");
}
}
  • 重载(overload):同一个类中,方法名相同,参数不同,返回值可以相同或不同。
public class Animal {
public void test() {}
public void test(int num) {}
public void test(String str) {}
public void test(int num, String str) {}
public void test(String str, int num) {}
}

2.2.多态

多态就是同一个行为具有不同的表现形式。

多态分类:

  • 编译时多态:静态的,主要是方法的重载
  • 运行时多态:动态绑定实现的,例如父类的引用指向子类的对象

实现多态的必要条件:

  • 继承
  • 重写
  • 向上转型:父类的引用指向子类的对象

多态的优点:

  • 消除耦合关系
  • 可扩展性
  • 简单易用

多态的实现方式:

  • 重写
  • 接口:可多实现接口,解决单继承的缺陷
public interface Animal {
public void run();
} public class Cat implements Animal {
@Override
public void run() {
System.out.println("猫趴");
}
}
  • 抽象类和抽象方法:抽象类中可以存在非抽象方法,抽象方法一定存在于抽象类中,抽象方法只声明不实现,继承的子类必须实现抽象类中的抽象方法
public abstract Animal {
public abstract void run();
} public class Cat extends Animal {
@Override
public void run() {
System.out.println("猫趴");
}
}

2.3.封装

封装将类的实现细节隐藏,以保证程序和数据不受外部干扰,保护信息。

优点:

  • 保护类中的东西,隐藏信息,实现细节
  • 良好的封装可以减少耦合
  • 类内部结构可以自由修改
  • 可以精确控制类成员
public class Person {
private String name;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

将类的属性设置为private,然后对外提供public方法进行赋值和取值。

Java基础学习之面向对象(4)的更多相关文章

  1. java基础学习05(面向对象基础01)

    面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...

  2. Java基础学习(三)—面向对象(上)

    一.理解面向对象       面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是 ...

  3. java基础学习总结——面向对象1

    目录 一.面向过程的思想和面向对象的思想 二.简单理解面向对象 三.面向对象的设计思想 四.对象和类的概念 五.如何抽象出一个类? 六.类(对象)之间的关系 七.Java与面向对象 八.为什么使用面向 ...

  4. java基础学习总结——面向对象2

    一.JAVA类的定义

  5. java基础学习05(面向对象基础02)

    面向对象基础02 实现的目标 1.String类的使用2.掌握this关键字的使用3.掌握static关键字的使用4.了解内部类 String类 实例化String对象一个字符串就是一个String类 ...

  6. java基础学习05(面向对象基础01--类实例分析)

    面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过set ...

  7. 转载-java基础学习汇总

    共2页: 1 2 下一页  Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3     Java基础学习总结——Java对象的序列化和 ...

  8. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  9. Java基础教程:面向对象编程[1]

    Java基础教程:面向对象编程 内容大纲 Java语言概述 Java语言特点 1.Java为纯面向对象的语言,它能够直接反映现实生活中的对象.总之,Everything is object! 2.平台 ...

随机推荐

  1. 第05组 Alpha冲刺(4/6)

    .th1 { font-family: 黑体; font-size: 25px; color: rgba(0, 0, 255, 1) } #ka { margin-top: 50px } .aaa11 ...

  2. 7. 基于MLlib的机器学习

    *以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第七部分是讲的是如何使用Spark中提供机器学习函数的MLlib库,在集群中并行运行机器学习算法. MLlib是Spark中提 ...

  3. react 中组件状态的一些理解

    组件状态:即 state 只有当state发生变化时,组件才会更新. 当一个html标签的值依赖于state的值得时候,如果state的值没有更新时,这个标签的值无论如何也是不会更新的. 看下面示例: ...

  4. docker学习汇总

    学习思路: l Docker是什么? l Docker有什么特点? l Docker 怎么用? l 不论什么知识框架都要以官方文档为主 一.认识docker Docker的概念 Docker是一个开源 ...

  5. python3中的os.path模块

    os.path模块主要用于获取文件的属性,这里对该模块中一些常用的函数做些记录. os.abspath(path):获取文件的绝对路径.这里path指的是路径,例如我这里输入"data.cs ...

  6. UNP——第三章,套接字编程介绍

    1.套接字结构 多数套接字函数都有套接字结构参数,每个协议族都定义了自己的套接字结构,以 sockaddr_ 开始,并对应协议族的唯一后缀. struct sockaddr_in { uint8_t ...

  7. Spring源码之事务(一)— TransactionAutoConfiguration自动配置

    总结: 在ConfigurationClassParser#parse()中会对deferredImportSelectorHandler进行处理(在处理@ComponentScan 自己所写@Com ...

  8. ceph的ISCSI GATEWAY

    前言 最开始接触这个是在L版本的监控平台里面看到的,有个iscsi网关,但是没看到有类似的介绍,然后通过接口查询到了一些资料,当时由于有比较多的东西需要新内核,新版本的支持,所以并没有配置出来,由于内 ...

  9. Python_爬虫_案例汇总:

    1.豆瓣采集 1 #coding:utf-8 2 #采集豆瓣书信息和图片,写进数据库 3 4 from urllib import request 5 # from bs4 import Beauti ...

  10. Java编发编程 - 线程池的认识(二)

    核心线程池的内部实现 依然参考 JDK 对线程池的支持,各个接口.相关类之间的关系:  (1)对于Executors中几个创建线程池方法底层实现: // 创建固定线程数量的线程池 public sta ...