大家好,我是猿人(猿码天地创始人),今天给码农们或即将成为码农或想成为码农的朋友讲讲Java中的类与对象,究竟是个什么鬼,现在是深夜23:18分,猿人最擅长熬夜,就是不怕掉头发!一切都是为了亲爱的粉丝朋友能学到知识,猿人熬夜也是值得的!
我是「猿码天地」,一个热爱技术、热爱编程的IT猿。技术是开源的,知识是共享的!
写作是对自己学习的总结和记录,如果您对 Java、分布式、微服务、中间件、Spring Boot、Spring Cloud等技术感兴趣,可以关注我的动态,我们一起学习,一起成长!
用知识改变命运,让家人过上更好的生活,互联网人一家亲!
Java知识学堂:https://gitee.com/zhangbw666/it-knowledge
好,废话不多说,直接干,进入正题:Good Good Study,Day Day Up!
1. 现实中的类与对象
-
对象:一个具体的实体、一个具体的事物(同时具有属性和方法)
举例:
汽车
属性:品牌、车轮、方向盘、车灯
功能:载人、赛车
-
类:具有相同属性和功能的对象归为一类,这就是类,人类也是类啊,因为人也有属性和功能。
2. Java中的类
-
类的创建(关键字class)
-
类的属性
格式:
public 属性类型 属性名;
-
类的方法
格式:
public 方法返回值类型 方法名(参数类型 参数名,……){
方法体,方法需要执行的内容
}
注意:
(1) 方法中需要使用自己的属性,则直接写属性名。
(2) 参数为方法需要的外部条件。
-
举例
public class Demo {
//属性
public String name;
public int attackvalue;
public int blood;
//方法
public void attack(captain cap){
cap.blood=cap.blood-attackvalue;
}
}
3. Java中的对象
-
对象的创建(关键字new)
格式:
类名 对象名 = new 类名();
-
对象的属性
格式:
对象名.属性名
-
对象的方法
格式:
对象名.方法名(参数值,……);
-
举例
//创建一个对象
Demo iron=new Demo();
//对象属性
iron.name="钢铁侠";
iron.attackvalue=6;
iron.blood=120;
//创建第二个对象
Demo cap=new Demo();
//对象属性
cap.name="美国队长";
cap.attackvalue=8;
cap.blood=100;
//对象方法
while(iron.blood>0 && cap.blood>0){
iron.attack(cap);
cap.attack(iron);
}
4. 三个基本特征
封装
封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承
面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
继承的过程,就是从一般到特殊的过程。
在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
继承关键字:extends
猿人也给大家讲讲继承的四个关键字:extends,super,protected,private的含义及用法
-
①Extends(扩展):用来帮助子类继承父类
用法:public class YanFaWork(子类) extends Father(父类){ }
可理解为:类xxx 由 xxx扩展得到
-
②super(超级):用来继承(或者说是链接)父类中的属性。
用法:一般在构造函数中如下
public YanFaWork(String name) {
super(name);
}
可理解为:超链接
-
③protected(被保护的):用来定义属性,属性的权限是受保护的,但是子类中可以直接访问。
用法:
public class Father {
protected String name;
}
-
④private(私有的):用来定义属性,属性的权限是私有的,子类不可以访问父类私有的财产。
用法:
public class YanFaWork extends Father{
private int ernum;
}
protected和private的不同之处就在于,在父类中用protected定义的属性子类中可以直接访问,而用private定义的属性子类不能继承。
多态
简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
多态存在的三个必要条件:
1. 要有继承;
2. 要有重写;
3. 父类引用指向子类对象。
那么程序运行的结果是什么?答案是:两次“我是一个男人。。。”,也就是说,运行结果都一样,那第一个没体现多态的写法,和后面体现多态的写法有什么区别?或者说多态有什么好处?当你封装的方法中,需要传入一个Man类型的参数,并且在方法内部调用它的say()方法,这时候一切都没有问题。但是随着后面功能越来越复杂,光一个Man是无法满足需求的,这时就有了Children,Woman,OldMan等,它们说的不一样,你总不能定义很多方法,每个方法的参数分别为上述的Children等类型吧?
所以这时,你只需要编写一个父类People,让Children这些继承并重写People方法,将你的方法参数设置为People类型的,即可解决问题!
实现多态,有二种方式,重写(Override)和重载(Overload)。
重写,是指子类重新定义父类的虚函数的做法。
重载,是指允许存在多个同名函数,而这些函数的参数不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
5. 类和对象的关系
1.类是一个静态的概念,类本身不携带任何数据。当没有为类实例化对象时,类本身不存在于内存空间中。
2.对象是一个动态的概念。每一个对象都有自己独特的属性,使用关键字new实例化对象时,同时为对象分配了内存。
猿人于2021年3月15日 0点40分 于深圳整理,整理完这篇文章头发还有10万零548根,今天掉了2根头发,持续记录头发根数,加油!