Java基础学习之面向对象(4)
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)的更多相关文章
- java基础学习05(面向对象基础01)
面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...
- Java基础学习(三)—面向对象(上)
一.理解面向对象 面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是 ...
- java基础学习总结——面向对象1
目录 一.面向过程的思想和面向对象的思想 二.简单理解面向对象 三.面向对象的设计思想 四.对象和类的概念 五.如何抽象出一个类? 六.类(对象)之间的关系 七.Java与面向对象 八.为什么使用面向 ...
- java基础学习总结——面向对象2
一.JAVA类的定义
- java基础学习05(面向对象基础02)
面向对象基础02 实现的目标 1.String类的使用2.掌握this关键字的使用3.掌握static关键字的使用4.了解内部类 String类 实例化String对象一个字符串就是一个String类 ...
- java基础学习05(面向对象基础01--类实例分析)
面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过set ...
- 转载-java基础学习汇总
共2页: 1 2 下一页 Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3 Java基础学习总结——Java对象的序列化和 ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- Java基础教程:面向对象编程[1]
Java基础教程:面向对象编程 内容大纲 Java语言概述 Java语言特点 1.Java为纯面向对象的语言,它能够直接反映现实生活中的对象.总之,Everything is object! 2.平台 ...
随机推荐
- npm pm2
安装 npm install -g pm2 用法 $ npm install pm2 -g # 命令行安装 pm2 $ pm2 start app.js -i 4 # 后台运行pm2,启动4个app. ...
- JS中的Array之length不同JAVA之处
1.length属性可写 a=[2,4,5,6,7,90]; //a.length->6 a.length=8; //a=[2, 4, 5, 6, 7, 90, undefined , unde ...
- mdp文件-Chapter2-NVT.mdp
这是mdp文件系列的第二篇,介绍nvt平衡中要使用的mdp文件. 先上代码,nvt.mdp 1 title = OPLS Lysozyme NVT equilibration 2 define = - ...
- java版飞机大战代码
@ 目录 前言 Plane PlaneStatus类 Power类 Gift Diji play类 over类 MainFrame主类 MyZiDan DijiZiDan Before 前言 很久之前 ...
- history命令的优化
前言 默认的history记录的信息有限,我们对这个进行一定的扩充 我们看下大概哪几个需求 记录用户登陆的ip 记录用户的名称 记录执行命令的时间 具体实现 我们看下应该怎么做这个,尽量在不改变用户的 ...
- Java8 方法引用和构造方法引用
如果不熟悉Java8新特性的小伙伴,初次看到函数式接口写出的代码可能会是一种懵逼的状态,我是谁,我在哪,我可能学了假的Java,(・∀・(・∀・(・∀・*),但是语言都是在进步的,就好比面向对象的语言 ...
- 存储型跨站获取COOKIE漏洞复现
一.漏洞描述 获取网站cookie 二.漏洞原理 1.服务器后台写入PHP代码 $cookie = $_GET['cookie']; if($cookie){ echo ($cookie); $log ...
- Win10 安装MySQL 5.7.32(解压版)
Win10 安装MySQL 5.7.32(解压版) MySQL 5.7.32 下载 官网下载(速度慢,不推荐使用):https://dev.mysql.com/downloads/mysql/ 清华镜 ...
- java8新特性LocalDate、LocalTime、LocalDateTime的学习
以前操作时间都是使用SimpleDateFormat类改变Date的时间格式,使用Calendar类操作时间.但是SimpleDateFormat是线程不安全的,源码如下: private Strin ...
- 这几种实现线程的方法你一定要知道,月薪20k以上的面试都会问到
实现线程的三种方式总结 最近有看到Java线程的实现相关问题,在此对线程实现方式做一个小小的总结,当做笔记,便于日后查看. 平时常用的线程方式有三种: (1).继承Thread类,并重写其run()方 ...