黑马程序员——面向对象(1)
------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
三、黑马程序员—面向对象(1)
2、类
System.out.println("个人情况:"+name+age+sal);
3、构造方法
构造方法:用来构造类的实例(每一个类都默认有一个无参的构造方法,得使用new调用)
因为有(),所以是方法,实际上它就是构造方法,并且是非私有的构造方法。
如:CellPhone cp = new CellPhone();
System.out.println("个人情况:"+name+age+sal);
public Person(String name, int age) {
public Person(String name, int age, int sal) {
4、static关键字
主方法(main)是静态的(可以利用类名去调用静态的main方法,很正常!但是会陷入死循环,导致内存溢出,jvm自动停止!)
public static void main(String[] agrs){}
用static 修饰的成员表示它属于这个类共有,而不是属于该类的单个实例。
static 修饰的字段和方法,既可以通过类调用,也可以使用实例调用;
没static 修饰的字段和方法,只能使用实例来调用(建议使用:类名来调用;其实在底层,对象调用类成员,也会转换类名调用)
5、匿名对象
一个没有名字的对象, 创建了一个对象出来,没有赋给一个变量;
new Person().age = 17;//使用一次之后就被销毁了
6、this关键字
构造器中相互调用,但是此时this([参数])必须写在构造方法第一行。
this不能用在static修饰的方法里和static修饰的代码块里;
7、面向对象之封装
1.把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类);
2."信息隐藏", 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,字段;
封装机制在程序中的体现是:把描述对象的状态用字段表示,描述对象的行为用方法表示,把字段和方法定义在一个类中,并保证外界不能任意更改其内部的字段值,也不允许任意调动其内部的功能方法。
程序中的一种体现:通常将类中的成员变量私有化(private),通过对外提供方法(setXxx,getXxx),可对该变量(xxx)进行访问。
public void setName(String name) {
8、访问修饰符
private 类访问权限:本类内部可以访问,不能继承到子类;
default 什么都不写,包访问权限:本类内部可以访问,同包其他类也可以访问,同包可继承;
protected 子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问,能继承到子类;
public 公共访问权限:任何地方都可以访问,能继承到子类;
9、类的设计分析
类中的所有方法都不要直接处理(输出打印),而是交给调用者去处理。
10、面向对象之继承
首先有反映一般事物特性的类,然后在此基础上反映出特殊事物的类;
2、让类与类之间产生关系,有了这个继承关系才有了多态的特性。
因为多继承容易带来安全隐患(父类多了, 功能相同的话,就会出现调用不确定性吗,覆写一个方法,到底覆写的谁的?)。
4、Java支持多层继承,object是每个类的超类,实现树形结构。
[修饰符] class SubClass extends SuperClass
按照这种关系,我们把SuperClass类称为父类或基类,把SubClass称为子类或派生类或拓展类;
学生属于人的一种特殊情况,此时我把人的共性写在Person类里面,为了让学生拥有这些共性(别的比如老师也可以有这些共性),然后我就让学生来拓展Person类。
Java只支持单继承,不支持多继承;//不然的话,比如show方法,继承了多个,不知道到底调用那一个。
一个类没显示的继承其他的一个类的时候,默认的直接父类就是Object类;
Student 的直接父类是Person,Object类也是Student类的父类,但是是间接父类;
一旦一个类显示的继承了其他的一个类的时候,此时默认的直接父类Object就会被取消;
Java里一个类只能有一个直接父类;java.lang.Object是所有类的父类,Object要么是直接父类要么是间接父类。
子类对象在实例化之前必须首先调用父类中的构造方法之后再调用自身的构造方法。
11、子类访问父类和方法覆写
但是子类可以调用父类中的非私有方法来间接访问父类的私有成员。
Person类中有私有字段name,Student继承Person
当父类中某个方法不适合于子类时,子类出现父类一模一样的方法.
判断必杀技:子类方法前加上@Override能编译通过,表明是方法的覆写。
子类方法声明抛出的异常应比父类方法申明抛出的异常更小或相等;
当父类的某个方法不适合于子类本身的特征行为时就当覆写父类中应当改变的方法。
12、super关键字和调用父类构造方法
如果子类要调用父类被覆盖的实例方法,可用super作为调用者调用父类被覆盖的实例方法。
Java在执行子类的构造方法前会先调用父类无参的构造方法,其目的是为了对继承自父类的成员做初始化操作。
子类在创建对象的时候,默认调用父类的无参构造方法,要是子类构造方法中显示指定调用父类其他构造方法,就调用指定的父类构造方法,取消调用父类无参构造方法。
System.out.println("父类默认隐式的构造方法!");
System.out.println("父类显式的构造方法!");
System.out.println("子类默认隐式的构造方法!");
public static void main(String[] args) {
13、面向对象之多态
好比,你去面馆吃面,说我要吃面,那么;老板给我牛肉面,鸡蛋面等都可以,
编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给变量的对象决定。
父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
System.out.println("一般的狗吃一般的狗粮!");
System.out.println("哈士奇吃哈士奇的狗粮!");
System.out.println("藏獒吃藏獒的狗粮!");
public static void main(String[] args) {
14、引用变量类型转换
判断指定的变量名此时引用的真正类型是不是当前给出的类或子类;
黑马程序员——面向对象(1)相关推荐
- 黑马程序员 面向对象总结2
--------android培训.java培训.期待与您交流! ---------- 面向对象总结2 一:引用变量的强制类型转换 在Java中,人们常常提到引用类型的变量,其实质引用变量只能调用它在 ...
- 黑马程序员 面向对象总结1
--------android培训.java培训.期待与您交流! ---------- 面向对象总结1 一:类,对象,属性,方法,构造器的概念: 类:用于描述客观世界里某一类对象的共同特征. 对象:可 ...
- 黑马程序员---面向对象上(封装,继承,多态)
------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...
- 黑马程序员—面向对象(1)
------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...
- 黑马程序员 面向对象
--------------android培训.Java培训.学习型技术博客.期待与您交流! -------------- 特点:1:将复杂的事情简单化. 2:面向对象将以前的过程中的执行者,变成了指 ...
- 黑马程序员-面向对象-06天-5(单例设计模式)
package java06;/** 设计模式:解决某一类问题最行之有效的方法.* java中23种设计模式:* 单例设计模式:解决一个类在内存只存在一个对象.* 想要保证对象唯一.* 1,为了避免其 ...
- 黑马程序员---面向对象笔记总结
------- android培训.java培训.期待与您交流! ---------- 封装 匿名函数 2--匿名对象使用方式一,当对象的方法只调用一次时,可以用匿名对象完成,这样写比较简单,如果对一 ...
- 黑马程序员-面向对象-08天-2 (多态)
package java08;/** 多态:可以理解为事物存在的多种体现形态.*人:男人,女人*动物:猫,狗.*猫 x = new 猫();*动物 x = new 猫();*1,多态的体现* 父类的引 ...
- 黑马程序员-面向对象-06天-3(static-静态代码块)
package java06;/** 静态代码块.* 格式:* static* {* 静态代码块中的执行语句.* } * 特点:随着类的加载而执行,只执行一次,并优先于主函数.* 用于给类进行初始化的 ...
最新文章
- Epoll为我们带来了什么
- 前端基础git(一)-git入门代码版本控制介绍
- python基础语法(一)
- LeetCode 260. Single Number III
- 用verilog实现一个 一位全加器
- java调试报告_java,生成测试报告.docx
- 三峡大学本科毕业论文答辩PPT模板
- 案例|工业物联网解决方案•工业互联网云平台
- 无法删除文件,无法读源文件或磁盘
- PHP创始人:开源与商业软件是竞合关系(转)
- Spring Boot 无侵入式 实现API接口统一JSON格式返回
- 国内数字藏品的乱象与未来
- openFlow入门
- 热力夏季运动会 java,描写夏季运动会的作文400字
- google colab自动断连咋办?
- DeCAF: A Deep Convolutional Activation Feature for Generic Visual Recognition 一般视觉识别的深度卷积刺激特征
- 网易伏羲AI虚拟人技术赋能网易云音乐虚拟偶像“乐灵”正式出道
- 数据库中的表导出成excel表格 并发送给客户端
- Ubuntu18.04 安装有道词典youdao-dict
- 未来几年人工智能会迎来哪些激动人心的改变