类与对象

在学习Java中,最重要的就是面对对象,面对对象三大特性:封装,继承,多态
什么是面对对象?
面对对象,就是你在进行开发时,把所有能够认知到的事物看做对象,去描述它的行为和特征。
什么是类和对象?

类是确定对象将会拥有的特征(属性)和行为(方法),类在客观中是不存在的,它只是用来描述对象的一些信息。
类的特点:
类是对象的类型
具有相同方法和属性的一组对象的集合
对象
对象就是能够描述出来的物体,万物皆对象,你所能够认知出来的都可以成为对象,对象具有特征(属性)和行为(方法)
什么是对象的属性
对象具有类型,属性,对象的属性就是指对象所拥有的特征,
列如你要买电脑,电脑有什么特征,它有品牌,价格,笔记本类型是游戏本还是商务本等等一些特定值,可以进行描述这个电脑的都属于它的特征(也就是属性)
什么是对象的方法
对象执行的操作,或者说对象能够做什么或者说对象的功能,能够做什么的行为或者对象的功能都叫做对象的方法。你买一台电脑,这个电脑能打游戏,能上网,打游戏和上网就称为名为电脑的对象的方法。
类和对象的区别
类是抽象,客观是不存在的,类只是用来描述对象的具体信息,类是实体,可以根据类中的构造方法来得到对象,计算机操作的是数据,而对象就是真实的数据信息,而类就是数据信息的类型。
定义一个类
类是所有java程序中的组织单元,现有类才能创建对象。
定义一个类:
类的名字
属性
方法

//创建一个名为computer的类
public class computer {//类的属性(也叫成员变量)String brand;//电脑的品牌int price;//电脑的价格String type;//电脑的类型//类的方法public void playGame(){System.out.println("使用电脑打游戏");}public void netPlay(){System.out.println("使用电脑上网!"+"brand:"+brand+" price:"+price+" type:"+type);}}

使用类去创建对象
使用类去创建对象叫做实例化

public class InitailComputer {public static void main(String[] args){//使用computer类进行创建computer对象,new computer()就是实例化computer computer=new computer();、//调用方法computer.netPlay();}
}

执行结果为:使用电脑上网!brand:null price:0 type:null
在没有给实例变量赋值的情况下,默认值为0和NULL
什么是实例变量
声明在所有方法体和代码块之外,并且没有使用static修饰的变量,叫做实例变量;
在使用对象需要两步操作:
对实例变量进行赋值

      //给实例变量赋值computer.brand="联想";computer.price=5000;computer.type="游戏本";

调用方法
三种变量
构造方法
在创建对象时,我们使用的是实例化过程,也就是new computer();后面的computer();就是构造方法,我们刚刚的computer类中并没有这个方法,当类中,没有这个方法时,系统会自动生成这个构造方法。有无参构造和有参构造,有参构造需要我们自己创建。有参构造可以对实例变量进行初始化。
构造方法与普通方法的不同
1.普通方法是描述对象的行为或者是功能,而构造方法是用来创建对象。
2.构造方法用来初始化对象。与类名相同,但没有返回值。
构造方法的特点
1.没有构造方法时,系统会自动添加无参构造方法
2.当有指定的构造方法时,无论是无参构造还是有参构造,系统都不会再自动添加无参构造
3.构造方法也是方法,也会有重载,根据参数的类型和个数进行调用不同的重载构造方法
4.不仅能在构造方法中给属性赋值,还能保证赋的是合理值
类与对象总结:
创建一个类,去描述一个对象的属性(变量)和行为(方法),创建对象的过程叫做实例化,就是new 构造方法了,创建完对象后的变量叫做实例变量,对象要对其进行初始化。

封装

将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
好处
用户只能通过规定的方法去访问数据
可以去隐藏类的实例细节,方便修改和实现
封装的实现步骤
1.修改属性的可见性语句
2.创建getter/setter方法
3.在getter/setter方法中加入属性控制语句
使用getter/setter方法可以进行对属性进行赋值,但并不是只能使用getter/setter方法进行对属性的赋值,使用getter/setter方法是一种标准,一种规范。
java中的包管理,访问修饰符,this关键字
Java中的内部类

继承

继承是一种类与类之间的关系,有个动物类,一个猫类,猫是动物,猫继承动物类,那么动物类被称为父类,猫类被称为子类。
继承的好处
1.子类拥有父类的所有属性和方法,前提属性和方法的修饰符不能为private,使用private修饰符的属性和方法将不能被继承。
2.实现代码的复用
语法
class 子类 extends 父类
创建一个父类

public class Animal {public String name;public int age;public String color;public void lound(){System.out.println("动物会叫");}
}

创建一个子类继承父类

public class Cat extends Animal {
}

创建子类对象

public class Initail {public static void main(String[] args) {Cat cat=new Cat();cat.name="小花";cat.lound();}
}

继承的初始化顺序
初始化父类在初始化子类
先执行初始化对象中属性,在执行构造方法中的初始化

//父类
public class Animal {public String name;public int age;public String color;public void lound(){System.out.println("动物会叫");}//父类构造方法public Animal(){System.out.println("animal构造方法执行");}}//子类
public class Cat extends Animal {public Cat(){System.out.println("Cat构造方法执行");}
}//执行类
public class Initail {public static void main(String[] args) {//创建cat对象Cat cat=new Cat();cat.name="小花";cat.lound();}
}
/*
*结果为:animal构造方法执行
*Cat构造方法执行
*动物会叫
*/

当我们进行创建子类对象时,先是创建父类的属性进行初始化,再执行父类的构造方法,然后执行子类对象属性的初始化,再执行子类的构造方法
方法的重写
子类继承父类的方法,对父类的方法不满意,想写一个子类自己的方法,就是方法的重写,在调用方法时,会优先调用子类的方法。

返回值类型
方法名
参数类型及个数
都要与父类继承的方法相同,才叫方法的重写

子类不想进行动物叫,想要自己叫,于是在子类中重写父类方法:

public class Cat extends Animal {public void lound() {System.out.println("小猫叫 喵喵喵");}
}

多态

多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作
引用多态
父类的引用可以指向本类的对象
父类的引用可以指向子类的对象
方法多态
创建本类对象时,调用的方法为本类方法
创建子类对象时,调用的方法为子类重写的方法或者继承的方法

构成多态的三个条件:
继承
方法重写
父类引用指向子类对象

对于多态的理解
父类引用指向子类对象,就是 父类类名 对象名=new 子类类名();特点是:创建出的对象是向上转型,就是可以进行调用父类的属性,父类的方法和子类重写父类的方法,而不能去调用子类的属性和子类特有的方法。

public class Animal {public String name="动物";//父类属性//父类方法public void lound(){System.out.println("动物叫");}
}
//子类继承父类
public class Cat extends Animal {public String name="小猫";//子类属性//子类重写父类lound方法public void lound(){System.out.println("小猫叫");}//子类特有方法public void play(){System.out.println("玩耍");}
}
public class Initail {public static void main(String[] args) {//创建子类对象1Cat cat=new Cat();System.out.println(cat.name);//输出为子类属性名称cat.lound();//调用子类重写方法cat.play();//调用子类特有方法//父类引用指向子类Animal animal=new Cat();//向上转型System.out.println(animal.name);//输出为父类属性名称animal.lound();//调用子类重写方法//  animal.play();不能进行调用子类特有方法,想要去调用子类的特有方法,可以向下转型Cat c=(Cat) animal;//向下转型c.play();}
}

引用类型的转换
向上类型转换:
把小类型向大类型进行转换(隐式、自动类型转换、无风险)
向上类型转换:
把大类型向小类型进行装换(强制类型转换、有风险)

public class Initail {public static void main(String[] args) {//创建子类对象1Cat cat=new Cat();//注意刚开始的类型为Cat类型Animal animal=cat;//自动类型转换,向上类型转换Cat cat2=(Cat)animal;//强制转换,向下类型转换/**Dog dog=(Dog)animal;*  这样进行转换时编译器不会报错,但在运行时会进行报错*  由于刚开始我们向上进行类型转换,转换类型为cat类型*  在进行第二次向下类型转换时,转换类型为Dog类型*/Dog dog=(Dog)animal;}
}

instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题

public class Initail {public static void main(String[] args) {//创建子类对象1Cat cat=new Cat();//注意刚开始的类型为Cat类型Animal animal=cat;//自动类型转换,向上类型转换if(animal instanceof  Cat){Cat cat2=(Cat)animal;//强制转换,向下类型转换}else {System.out.println("cat类型转换出错");}if(animal instanceof  Dog){Dog dog=(Dog)animal;}else{System.out.println("Dog类型转换出错");}}
}

JAVA基础--java简单知识04(类与对象,封装,继承,多态)相关推荐

  1. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  2. Java基础语法(七)——类和对象

    文章目录 Java基础语法(七)--类和对象 一.类和对象的初步认识 二. 类和类的实例化 1.类的定义 2.实例化对象 3.如何使用类中的数据 三. 类的成员 1. 字段/属性/成员变量 (1)实例 ...

  3. java自学 part2 数组 类和对象 包 继承 多态 抽象类 接口

    数组:arr 获取数组的长度:arr.length 数组转字符串: Arrays.toString(arr) 数组的拷贝: Arrays.copyOf(arr,arr.length) 数组的排序:Ar ...

  4. 零基础入门学习Python(36) 类和对象:继承

    继承的语法结构 class DervieClassName(BaseClassName) 被继承的类我们称之为"父类","基类"或"超类", ...

  5. python类与对象 封装继承与多态 0308

    类与对象 初始化方法 init方法 带参实例化类 del方法 str方法 私有 继承 方法的重写 super 父类名称调父类方法 调用父类私有 间接调用 多继承 新式类经曲类 多态 类属性 类方法 静 ...

  6. Java基础巩固(一)类,接口,枚举,常用API,集合,泛型,正则,数据结构

    一.static.final.权限关键字,代码块,接口,枚举 1 关键字 2 代码块 3 接口 4 枚举 idea快捷键 shift + enter 换行 ctrl + Alt + shift + U ...

  7. java基础--IO流之File类

    一.File类概述 用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作,File对象可以作为参数传递给流的构造函数 二.File类常见方法: 1,创建 boolean createN ...

  8. Java基础学习——第十章 枚举类注解

    Java基础学习--第十章 枚举类&注解 一.枚举类(enum) 1. 枚举类的概念 枚举类:类的对象只有有限个,确定的 线程状态:创建.就绪.运行.阻塞.死亡 当需要定义一组常量时,强烈建议 ...

  9. Java基础篇:如何解决成员的访问和继承?

    Java基础篇:如何解决成员的访问和继承? 尽管子类包括超类的所有成员,它不能访问超类中被声明成private的成员.例如,考虑下面简单的类层次结构: /* In a class hierarchy, ...

  10. 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)

    面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...

最新文章

  1. Excel如何设置单元格行高,办公入门
  2. 零基础参加java培训主要学什么
  3. linux 下byte,char,unsigned char的区别
  4. SharedPreferences小细节
  5. FishC01 讲:我和 Python 第一次亲密接触
  6. 开发chrome插件(扩展)
  7. java 保存后中文乱码_sublime编写java程序保存编译,运行之后中文显示乱码
  8. A20 init.sun7i.rc 文件
  9. LeetCode 1976. 到达目的地的方案数(迪杰斯特拉 Python 优先队列)
  10. Java笔记-Spring-rabbitmq中设置receiveMessage参数为Message
  11. 电子计算机的应用是第四次信息技术革命,造纸术和印刷术的发明和应用第四次电报.PPT...
  12. Java学习笔记:BlockingQueue接口
  13. mysql 长度为1 的空字符串_MYSQL,如果定义了一个字符串的字段,长度为255,那么当我添加一个空字符串数据时占用空间吗?...
  14. 用C#把文件转换为XML
  15. 十五张思维导图带你快速学习PHP语言基础
  16. linux怎么将终端一分为二,Linux下的终端和作业控制
  17. pytorch之深度学习
  18. 创新创业基础-李德平章节测试答案
  19. 解决 mac系统下sublime imput 函数交互问题
  20. 用jQuery做一个简单的用户注册页面

热门文章

  1. 保存地理坐标信息的SLIC分割结果
  2. 面阵相机与六轴机器人之间通过偏差移动
  3. [Jzoj] 2197. 三核苷酸
  4. 【机器学习】GMM模型的直观推导(含中间步骤)
  5. 行为识别笔记:iDT算法用法与代码解析
  6. C#实现繁体简体转换方法总结|ASP.NET.分享
  7. uboot中LCD驱动修改
  8. Friedman test 和 Bonferroni-Dunn test 整理
  9. 3年自动化测试,我突然想转测试开发了,开发测试工具平台......
  10. python invoking c++