第2课第1节_Java面向对象编程_类的引入_P【学习笔记】
摘要:韦东山android视频学习笔记
1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字。代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添加上"广东",对于数量少还是比较方便,数量多还是很麻烦的。
#include <stdio.h> int main(void)
{
char *name1 = "zhangsan";
char *name2 = "lisi"; printf("%s\r\n",name1);
printf("%s\r\n",name2); return 0;
}
2.针对上述程序,我们先引入一个persion结构体。
#include <stdio.h>
struct persion{
char *name;
};
int main(void)
{
struct persion p1 = {"zhangsan"};
struct persion p2 = {"lisi"};
printf("%s\r\n",p1.name);
printf("%s\r\n",p2.name);
return ;
}
3 在上述的代码基础上,我们在persion结构体加入一个打印名字的函数指针。如下是最终版,这样的话,我们想调整输出的名字,要加上或去掉广东都很方便,只要在
printname函数里操作就可以了。
#include <stdio.h>
struct persion{
char *name;
void (*printname)(struct persion *per);
};
void printname(struct persion *per)
{
printf("guangdong %s\n",per->name);
}
int main(void)
{
struct persion p1 = {"zhangsan",printname};
struct persion p2 = {"lisi",printname};
p1.printname(&p1);
p2.printname(&p2);
return ;
}
编译运行,结果如下图:

4.在java中我们写出同样的程序,输出张三、李四两个人的姓名
class Persion {
String name;
String getName(){
return "guangdong " + name;
}
}
public class Oop{
public static void main(String args[]){
Persion p1 = new Persion();
p1.name = "zhangsan";
Persion p2 = new Persion();
p2.name = "lisi";
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
5 在4代码的基础上我们,添加构造函数,在定义对象的时候就把名字传递过去,构造函数的名字跟类名一样,在构造这个对象的时候就会自动执行这个构造方法。
class Persion {
String name;
String getName(){
return "guangdong " + name;
}
public Persion(String n){
name = n;
}
}
public class Oop2{
public static void main(String args[]){
Persion p1 = new Persion("zhangsan");
Persion p2 = new Persion("lisi");
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
编译运行结果如下:

6 在5代码的基础上,进行构造函数的重载,同时引入this,如果在一个类里面,类的属性与函数的参数名同名,我们加上this修饰表示是当前对象的属性。
class Persion {
String name;
int age;
String getName(){
return "guangdong " + name;
}
public Persion(){
name = "null";
age = 0;
}
public Persion(String name){
this.name = name; // this.name表示是当前对象属性的name不是函数参数的name
}
public Persion(String name,int age){
this.name = name;
this.age = age;
}
}
public class Oop3{
public static void main(String args[]){
Persion p1 = new Persion("zhangsan");
Persion p2 = new Persion("lisi");
Persion p3 = new Persion();
Persion p4 = new Persion("wangwu",6);
System.out.println(p1.getName());
System.out.println(p2.getName());
System.out.println(p3.getName());
System.out.println(p4.getName());
}
}
编译运行结果如下:

7 在6代码的基础上,我们添加类方法printPerson,那样我们不需要定义具体的类对象我们就可以直接用这个方法,同时我们添加一个类属性count,用来统计人数的多少。
class Persion {
static int count;
String name;
int age;
String getName(){
return "guangdong " + name;
}
public Persion(){
count ++;
name = "null";
age = 0;
}
public Persion(String name){
count ++;
this.name = name;
}
public Persion(String name,int age){
count ++;
this.name = name;
this.age = age;
}
static void printPersion(){
System.out.println("This is a class of Persion");
}
}
public class Oop4{
public static void main(String args[]){
Persion p1 = new Persion("zhangsan");
Persion p2 = new Persion("lisi");
Persion p3 = new Persion();
Persion p4 = new Persion("wangwu",6);
System.out.println(p1.getName());
System.out.println(p2.getName());
System.out.println(p3.getName());
System.out.println(p4.getName());
Persion.printPersion();
System.out.println(Persion.count);
}
}
编译运行结果如下:

8.在7代码的基础上,我们引入构造代码块, 每实例化一个对象前,都执行;先于构造方法执行。7的例子中我们要在每个构造函数进行count ++,有了构造代码块我们只需要在构造代码块写一次就够了。同时引入静态构造代码块,实例化第一个对象前,执行;只执行一次。
class Persion {
static int count;
String name;
int age;
String getName(){
return "guangdong " + name;
}
static {
System.out.println("static block");
}
{
count ++;
System.out.println("construct block");
}
public Persion(){
System.out.println("construct method:Persion 1");
name = "null";
age = 0;
}
public Persion(String name){
System.out.println("construct method:Persion 2");
this.name = name;
}
public Persion(String name,int age){
System.out.println("construct method:Persion 3");
this.name = name;
this.age = age;
}
static void printPersion(){
System.out.println("This is a class of Persion");
}
}
public class Oop5{
public static void main(String args[]){
Persion p1 = new Persion("zhangsan");
Persion p2 = new Persion("lisi");
Persion p3 = new Persion();
Persion p4 = new Persion("wangwu",6);
System.out.println(p1.getName());
System.out.println(p2.getName());
System.out.println(p3.getName());
System.out.println(p4.getName());
Persion.printPersion();
System.out.println(Persion.count);
}
}
编译运行,结果如下:

相关代码存放在github,可以下载https://github.com/zzb2760715357/100ask

第2课第1节_Java面向对象编程_类的引入_P【学习笔记】的更多相关文章
- 第2课第6节_Java面向对象编程_包和权限_P【学习笔记】
摘要:韦东山android视频学习笔记 1.使用package定义编译的时候存放的位置 package a.b.c.d; public class Package { public static v ...
- 第2课第3节_Java面向对象编程_继承性_P【学习笔记】
摘要:韦东山android视频学习笔记 面向对象程序的三大特性之继承性:继承性的主要作用就是复用代码.继承性也有一定的限制,如图一 图一 1.我们在第2课第2节_Java面向对象编程_封装性_P 中 ...
- 第2课第4节_Java面向对象编程_多态性_P【学习笔记】
摘要:韦东山android视频学习笔记 面向对象程序的三大特性之继承性: 1.向上转换:只能定义被子类覆写的方法,不能调用在子类中定义的方法. class Father { private int ...
- 第2课第2节_Java面向对象编程_封装性_P【学习笔记】
摘要:韦东山android视频学习笔记 面向对象程序的三大特性之封装性:把属性和方法封装在一个整体,同时添加权限访问. 1.封装性的简单程序如下,看一下第19行,如果我们不对age变量进行权限的管控 ...
- 第2课第7节_Java面向对象编程_内部类_P【学习笔记】
摘要:韦东山android视频学习笔记 1.什么是内部类:在类的内部定义一个类,内部类可以访问类的私有属性 class Outer{ ; class Inner{ public void print ...
- 第2课第5节_Java面向对象编程_异常_P【学习笔记】
摘要:韦东山android视频学习笔记 java的异常处理的原则如下: 1.我们先写一个没有对异常处理的程序,在进行除法运算的时候,除数是非零的话,运行时没有问题的,但是除数为零的时候,运行就会有问 ...
- Python 进阶_OOP 面向对象编程_类属性和方法
目录 目录 类属性 调用类属性 查看类属性 特殊的类属性 类方法 真构造器 __new__ 类属性 在理解类属性之前要先搞清楚 实例属性 和 函数属性 之间的区别: 1. 实例属性:指的是实例化类对象 ...
- Python 进阶_OOP 面向对象编程_类和继承
目录 目录 类 最简单的类 类方法 构造器 __init__ 创建一个类 实例化一个对象 调用实例的方法和属性 创建子类 使用 super 来调用父类的构造器 实例化子类对象 调用子类的属性和方法 类 ...
- C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]
面向对象编程 --句柄类与继承[续] 三.句柄的使用 使用Sales_item对象能够更easy地编写书店应用程序.代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对 ...
随机推荐
- ubuntu安裝postman遇到問題
@ubuntupc:~/Postman/app$ sudo ./Postman ./Postman: error while loading shared libraries: libgconf-2. ...
- pod健康检查(liveness probe存活探针&&readiness probe 可读性探针)
在Kubernetes集群当中,我们可以通过配置liveness probe(存活探针)和readiness probe(可读性探针)来影响容器的生存周期.参考文档:https://kubernete ...
- C++(三十八) — 继承方式、访问控制、构造和析构、虚继承
派生类继承了基类的所有成员,但不包含 构造函数.析构函数.默认赋值运算符. 1.继承方式.访问控制 (1)protected属性:类的对象不能访问该属性成员,但派生类的成员函数可以访问基类的prot ...
- cnn层次
5.1.1 输入层 输入层(Input Layer)通常是输入卷积神经网络的原始数据或经过预处理的数据,可以是图像识别领域中原始三维的多彩图像,也可以是音频识别领域中经过傅利叶变换的二维波形数据, ...
- vscode 上安装 leetcode插件
vscode 真是一款非常好的轻量级的代码编辑工具,无论windows还是ubuntu使用体验都非常好. leetcode用来练练脑子吧,不要老年痴呆了. 1. 安装vscode Ubuntu先去下载 ...
- Java&Selenium自动化测试之Page Object Model
PO是什么: 1.页面对象模型(PO)是一种设计模式,用来管理维护一组web元素的对象库 2.在PO下,应用程序的每一个页面都有一个对应的page class 3.每一个page class维护着该w ...
- 一 创建一个springboot项目之(微信点餐系统的设计与开发)
第一步:收到项目需求,进行数据库表的设计. 1.角色的划分: 卖家: 订单,类目 买家: 商品列表 2.功能模块的划分: 商品:商品列表 订单: 订单创建,订单查询,订单取消 类目:基于管理的功 ...
- 结构型模式(五) 外观模式(Facade)
一.动机(Motivate) 在软件系统开发的过程中,当组件的客户(即外部接口,或客户程序)和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战. ...
- spring框架面試題目
25个经典的Spring面试问答 这是在网上下载的面试题,忘记了出处,如带来不便联系本人立马删除,在这里提供给将要面试的朋友,与大家分享,希望能给您带来帮助! 问题清单: 1. 什么是Spring框架 ...
- yaml文件
apiVersion: apps/v1beta1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: ...