今天我们来聊聊面向对象的一些事情。

什么是面向对象?简单的来讲,面向对象是一种程序设计的思想,一种分析和解决问题的方式。如果说世间每一个事物,都是一个独一无二的个体,那么这个个体就是一个对象——你的女神,你的女朋友,她们是不是世界上独一无二的?是的。所以学会了面向对象的思想,保证你每分每秒都是快乐的,因为你每分每秒都想着她,当然,你的老婆也是世界上独一无二的,你每分每秒必须都面向着她,你的内心必须是每分每秒心情愉悦快乐无边!

好了,不开玩笑了,搞明白了吧?对象是一个独一无二的个体,是用来描述和表达一个事物的方式。比如说一个人,有性别,有名字,有身高,有体重等等特征,这些特征被叫做属性。一个人要吃饭,睡觉,上班,这些都是人的动作被称作行为。面向对象要做的,就是把事物的属性和行为描述出来,然后针对这些行为,逐步去实现功能。一旦上车,从此

在生活中,座椅板凳、天空马路,一阵风,一朵云……世间万物,都是独一无二的,这些个独一无二都是对象。那什么是类呢?比如我们说人类,身高,体重,姓谁名谁,吃饭睡觉,聊天打屁,都是一些共同属性和行为吧?那么描述这些属性和行为的集合就叫类。可以把类看作一类事物的模板,这个模板描述了这类事物的属性和行为。

那什么是对象呢?对象就是一个独一无二的个体,是一个具体的实例,比如一个具体的人——

简单来讲,类是对事物的描述,是抽象的,对象是一类事物的实例,是具体的。类是对象的描述,对象是类的实例。

接下来我们一起看看,如何在代码中来描述一个人——

那这个人类又怎么使用呢?

细心的你或许已经发现了,我们在描述和使用一个类的时候,会定义很多变量,

现在我们来看看他们的区别——

类的属性就是成员变量,方法中的变量,和语句体中的变量就是局部变量!他们的作用域是不同的,成员变量的作用域是整个类的范围,方法和语句体的变量作用域是在各自的语句体内,同一作用域,变量名是不允许重复的噢!

什么是封装?封装其实就是控制类和对象的属性和方法的访问权限。为什么要控制属性和方法的访问权限呢?因为世界上一些东西是不能谁便问的,比如——

有些时候,我们的对象的一些属性和方法并不希望被外部访问到。因为对象的属性如果都是用对象名.属性名去修改,那么程序可以随意访问修改,代码的维护性也不好,绝大多数我们都是通过定义访问器方法去修改某个对象的属性的。

接下来我们看一个封装的例子。

我们来看一个新东西——构造方法,构造方法是一种特殊的方法,对象的创建就是通过构造方法来完成,它的功能主要是完成对象的初始化。构造方法有以下特征:

1.构造方法和类名相同

2. 构造方法没有返回值,连void都没有。

3. 如果一个类不写构造方法,系统会自动创建一个无参的构造方法(编译器编译时生成)。

4. 如果一个类写了构造方法,系统就不会自动创建构造方法了,如果要创建对象,就需要提供满足构造方法的参数。

5.使用构造方法可以省略set方法的调用,但是如果需要传递的参数比较多,需要相当注意了,不是很推荐使用。

什么是JavaBean?JavaBean 编写java类的一种编码规范,类必须是具体的和公共的,并且具有无参数的构造方法,并且提供set和get方法来访问类的成员变量,get set方法最好还要满足小驼峰的命名方式。

接下来干什么?赶紧封装一个你的女朋友!

想知道是怎么做到和乔丹一样强大的吗?Java提供了这种机制——继承。子类可以继承父类的属性和方法,子类可以直接访问父类的非私有属性和行为。被继承的类被称作父类、超类(super class)、基类。继承者类被称作子类。继承使得子类具有父类的能力,是多态的前提,也减少了重复代码的编写,提高了软件的可维护性。

仔细分析生活中的事物,慢慢的就会发现有很多事物是有相同的属性和行为的,比如一个班级,有老师,有学生,但是老师和同学都是人,大家都有姓名 性别 年龄 身高 体重 都会吃饭 睡觉 说话,当然也有很多不同,老师会上课,学生会学习……如果我们定义一个学生类 一个老师类 都把公共的部分定义一次,那么会有很多的重复性劳动。我们希望把公共部分抽取出来,大家都去使用,就简单多了。

一个子类继承了父类,子类就会继承父类所有非私有属性(成员变量)和方法。那么我们会遇到一个问题,如果子类的成员变量或者方法和父类的重名了怎么办?

我们给MichaelJordan类增加一个属性age,给MySelf也增加一个重名的age属性,并且增加访问器方法:

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

public static void main(String args[]){
MySelf s = new MySelf();
s.setAge(18);
System.out.println(s.getAge());
}

此时,这个age属性的值是子类的还是父类的?setAge方法 和getAge方法是子类还是父类的?

答案是子类的。当子类的属性和方法和父类同名时,都是优先使用子类的属性和方法。在这种情况下,那父类的非私有属性和方法是不是不能访问了?当然是可以访问的!修改代码:

在子类中访问父类的属性和方法,需要使用关键字super,关键字super代表父类的引用地址!

还有有一种特殊情况:子类的方法名和返回值以及参数都和父类的一致时,子类会覆盖父类的方法,这种行为叫做方法重写(Override),出现这种情况往往子类需要定义和父类不一样的行为。

划重点了:

1. Java只支持单继承,不支持多继承。一个类不能同时继承两个以上的类。

2. Java支持多层继承,比如A继承B,B继承C。

3. 子类和父类是一个相对的概念,子类是谁的子类,父类是谁的父类。

其实乔老爷子一把年纪了,想要战胜球场4打怪还是有点困难的,四个怪物死守篮下,似乎还真没有啥办法。三分球?嗯。。。是个好主意...可是生涯命中率不到29%,搞笑一样,但是现在也飞不起来了,怎么办呢?

其实在现实生活中有很多抽象的概念。比如要打败球场4大怪,需要三分球,乔老爷子有自知之明,并不知道谁的三分球才可以打败他们。但是作为想要出门打篮球的你就必须想到用谁的三分球去打败4大怪。为了解决这种问题,java引入了抽象类和抽象方法。所谓抽象类,就是包含抽象方法的类,所谓抽象方法,就是只有声明,而没有方法体的方法叫抽象方法。

threePointShot方法前使用了abstract关键字,也没有方法体。一个方法使用abstract关键字修饰,就成了抽象方法,抽象方法只包含一个方法名以及参数定义,没有方法体。

如果一个类包含抽象方法,那么这个类就必须是抽象类,需要在class 关键字前 加入abstract关键字。

其实很多时候定义抽象类的目的,是为了将一些公共的方法进行抽象出来,让子类去实现需要独立实现的方法,然后通过父类去调用,从而达到抽象的目的,简化代码提高代码维护性。

用继承搞不定了吧?你不能继承多个类吧哈哈!想要同时具备多种能力怎么办?用接口试试!

静态常量:非必须,有需要就写。

抽象方法:使用abstract 关键字修饰,在接口中可以省略。

静态方法:JDK8以后才有是为了让接口更像一个类,实际上很少用,也体现不出啥先进性。建议弃用。

私有方法:JDK8以后才有,用于支持静态方法。越搞越回去了,建议放弃。

Java中提供了一种方式类似于插头的东西,可以将类与类连接到一起。接(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口和类不同,接口不能被实例化,但是可以被实现。接口定义的方法都是抽象方法,接口也没有成员变量,只能有静态常量。一个类可以实现多个接口,但是不能继承多个类!需要注意的是:

如果一个类实现某个接口,这个类需要实现接口的所有方法。

一个类可以实现多个接口,但是只能继承一个父类。

为什么再调用具体方法时,你使用了接口?为什么你在定义接口的时候定义了接口作为参数?好吧好吧,这是多态的一种体现形式。哪天你的showTime发生变化,直接改你自己就好了。这样搞可以让代码更灵活,更容易扩展!

多态是指同一种行为具有不同的表现形式。我们想一想java中有哪些特性是符合:同一种行为但是表现形式不同的?

1.继承或者是实现,作为一个子类继承了父类或者实现了某个接口,那么子类就具有父类的行为,如果子类重写父类的方法,那么子类和父类的表现形式就不同了。

2.方法重载,一个类具有多个同名不同参的方法。

3.父类或者是接口引用了子类或者是实现类的对象。这也是最常见的方式,可以让代码有更清晰的层次结构,更容易维护。

c 子类对象 访问父类对象受保护成员_看了这个,你就会搞对象了相关推荐

  1. c 子类对象 访问父类对象受保护成员_面向对象的三大特征

    1.封装 封装,就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 封装的好处: 良好的封装可以减少耦合. 类内部的实现可以自由修改. 类具有 ...

  2. c 子类对象 访问父类对象受保护成员_面向对象编程(OOP)

    这节讲一下,什么是面向对象(Object Oriented Programming).说面向对象之前,我们不得不提的是面向过程(Process Oriented Programming),C语言就是面 ...

  3. c 子类对象 访问父类对象受保护成员_面向对象三大特征: 继承

    如果子类重写了父类的方法,子类对象又要使用父类的方法怎么办 继承 今日内容 所有的类都直接或者简洁的集成到了Object Object:祖宗类 概述 要定义的类属于已有类的一种时,可以将该类定义为已有 ...

  4. c 子类对象 访问父类对象受保护成员_06-JavaSe面向对象

    一.static 1.它是一种修饰符 2.使用位置:它用来修饰成员变量和成员方法 static修饰成员变量,叫类变量: static修饰成员方法,叫类方法: 类成员=类变量+类方法 没有使用stati ...

  5. java如何中断父类方法_java – 如何测试调用父类的受保护(不需要)方法的方法?...

    我陷入了一个非常奇怪的情况. 我有一些我需要测试的特定代码. 这里是: public class A { /* * The real method of real class is so big th ...

  6. c# 不可访问 因为它受保护级别限制

    最近开始学习c#,编了一个程序就发现问题,不可访问 因为它受保护级别限制: 具体如下: 程序: using System; using System.Collections.Generic; usin ...

  7. java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...

    摘要:这篇JavaScript栏目下的"Javascript类定义语法,私有成员.受保护成员.静态成员等介绍",介绍的技术点是"javascript类.JavaScrip ...

  8. 子类怎么继承父类方法中的变量_关于继承的那些事!

    第二阶段 JAVA面向对象 第二章 继承 其实在我们面向对象这一阶段的学习中,我们就是围绕Java的三大特性(封装.继承.多态)来讲解的,在上一掌内容中我们讲解了一部分封装的有关知识,今天我们来重点学 ...

  9. c 子类对象 访问父类对象受保护成员_java面向对象总结

    前言:文章参考<java疯狂讲义>进行总结和归纳,知识要进行输出才算真正的有用. 在java的世界里,一切皆为对象,类是对对象的抽象,来一个例子:Person类 public 有了类,就可 ...

最新文章

  1. 用户及用户组管理(week1_day4)--技术流ken
  2. 什么?注释里面的代码居然能够执行
  3. 逻辑回归算法背后的数学
  4. javascript 西瓜一期 12 八进制的数数进位解析
  5. hadoop框架详细分析
  6. GeoTools操作Shape格式文件
  7. 大数据调度工具oozie详细介绍
  8. Abelssoft Undeleter(数据恢复软件)v5.01免费版
  9. 【平衡小车制作】(三)编码器讲解(超详解)
  10. 下方点击出项上方对应的插件_魔兽世界MiDKP3.0插件使用说明
  11. Anaconda介绍、安装及使用保姆级教程
  12. mysql 8.0 初识
  13. 给深度学习模型构建数据迭代器
  14. 「Python数据分析」CSV读取与写入的常见问题(空行、BOM、r/w/a模式、指针)
  15. Python面向对象—新旧式类,私有方法,类方法,静态方法
  16. Visual Studio 2022环境中C语言的使用——一维数组和二维数组
  17. SpringACK对RabbitMQ消息的确认(消费)
  18. 合理的薪酬机制是网格营销的关键
  19. Oracle 拼音排序
  20. android8OPPO,基于安卓8.1!OPPO R15深度体验:ColorOS 5.0焕然一新

热门文章

  1. 20款绝佳的HTML5应用程序示例
  2. MOQL--操作数(Operand) (二)
  3. 【重点!记忆化递归+DP】LeetCode 72. Edit Distance
  4. VSCode Python解决 No module named 问题
  5. Go 系列教程 —— 26. 结构体取代类
  6. 《深入剖析Tomcat》源码
  7. 树形$dp$学习笔记
  8. jQuery的立即调用表达式
  9. CentOS 本地ISO 挂载并配置本地软件源
  10. KM算法(最优匹配)