一、对象和类的概念

类:对具有相同属性和方法的一类事物的抽象。
对象:具体的某一事物,代表自身的一些属性和方法。
二、类(对象)之间的关系
关联(组合、聚合),继承,依赖、实现
三、面向对象设计思想
面向对象---》考虑哪些类,对象---》类和对象有属性、方法-----》类和类之间的关系
四、重载、重写和隐藏
1). 重载(overload):
方法重载就是多个方法名称相同但是参数类型或者参数个数不同的方法,与返回值类型和修饰符无关
class Test {
public int test(int a) {
return a;
}
public String test(String a) {
return a;
}
public float test(int a, String b) {
return 0f;
}
public float test(String a, int b) {
return 1.0f;
}
String test(float a) {
return "";
}
String test(int a) {//该方法不是重载
return "";
}
}
前面五个互为重载,第一个和第六个虽然返回值类型不同,但参数相同,所以第一个和第六个参数不是重载
2). 重写(override):
子类继承父类时,子类的方法名称、参数类型、参数个数与父类完全相同,则认为子类重写了父类的方法。
方法重写规则:
3). 隐藏:
隐藏是针对于父类的成员变量和静态方法而言的。子类中声明了和父类相同的变量名或静态方法(方法名相同、参数列表相同、返回类型相同)则实现了对父类成员变量和静态方法的隐藏,下面举个例子有助理解:
class A {
static int a = 1;
static int b = 2;
int c = 33;
public static void printA() {
System.out.print(a);
}
public static void printB() {
System.out.print(b);
}
}
class B extends A {
static int a = 3;
static int b = 4;
int c = 44;
public static void printB() {
System.out.print(b);
}
}
public class Test {
public static void main(String[] args) {
B.printA();
B.printB();
System.out.print(B.a);
A a = new B();
B b = new B();
a.printB();
b.printB();
System.out.print(a.c);
System.out.print(b.c);
}
}
输出结果:
1 4 3 2 4 33 44
如果子类中有相同名称的静态方法或变量父类的会被隐藏,如果子类中存在同名的静态方法或变量,则会隐藏父类中得静态方法或变量,此时子类调用的就是子类中自己的静态方法或变量;如果子类中不存在同名的静态方法或变量,则会调用父类中的静态方法或变量;父类调用的始终是其本身的静态方法和变量。
五、封装:
封装是把对象的属性和操作结合为一个独立的整体,隐藏对象内部操作的实现,用户只需要通过其对外提供的方法来访问该对象,无需知道其内部实现细节。
优点:
六、继承:
继承是一个对象获取另一个对象属性的过程,关键字为extends和implements。
1). IS-A关系(一个对象所属于另一个对象):
方式一. 用extends来实现继承:
public class Animal {
public void eat() {
System.out.println("Animal eating...");
}
}
public class Mammal extends Animal {
public void eat() {
System.out.println("Mammal eating...");
}
}
public class Dog extends Mammal {
public void eat() {
System.out.println("Dog eating...");
}
}
方式二. 用implements来实现继承:
public interface Animal {
void eat();
}
public class Mammal extends Animal {
public void eat() {
System.out.println("Mammal eating...");
}
}
public class Dog extends Mammal {
public void eat() {
System.out.println("Dog eating...");
}
}
无论方式一还是方式二,我们都可以用instanceof关键字检查得出:Mammal是一个Animal(哺乳动物也是动物);Dog既是一个Mammal,也是一个Animal(狗既是哺乳动物也是动物)。
public class Test {
/**
* instanceof关键字检查代码
*/
public static void main(String[] args) {
Mammal m = new Mammal();
Dog d = new Dog();
System.out.print(m instanceof Animal);
System.out.print(d instanceof Mammal);
System.out.print(d instanceof Animal);
}
}
输出结果:
true true true
2). HAS-A关系(一个对象含有另一个对象的一些属性):
public class Car{}
public class Speed{}
public class Benz extends Car{
private Speed sp;
}
Benz含有Spend属性,但Benz不是Spend
七、多态:
实现多态的三个必要条件:继承、重写、父类引用指向子类对象。
1). 向上转型:
我们实例化一个Dog对象可以用 Dog d = new Dog(); 我们也可以用 Animal d = new Dog(); ,后者就是向上转型(父引用指向子对象),上面两种方式创建出来的对象d,调用d.eat();输出的结果都是Dog eating...,这就体现出了java得多态。向上转型创建的对象会遗失掉和父类不同的方法和变量(不能用来调用子类特有的方法和变量)。
2). 举例说明:
class A {
public String show(D obj) {
return ("A and D");
}
public String show(A obj) {
return ("A and A");
}
}
class B extends A {
public String show(B obj) {
return ("B and B");
}
public String show(A obj) {
return ("B and A");
}
}
class C extends B {}
class D extends B {}
class Test {
public static void main(String[] args) {
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println(a1.show(b)); // ①
System.out.println(a1.show(c)); // ②
System.out.println(a1.show(d)); // ③
System.out.println(a2.show(b)); // ④
System.out.println(a2.show(c)); // ⑤
System.out.println(a2.show(d)); // ⑥
System.out.println(b.show(b)); // ⑦
System.out.println(b.show(c)); // ⑧
System.out.println(b.show(d)); // ⑨
}
}
输出结果:
A and A // ①
A and A // ②
A and D // ③
B and A // ④
B and A // ⑤
A and D // ⑥
B and B // ⑦
B and B // ⑧
A and D // ⑨
前三个比较简单不容易出错,看看下面几个:
show(D obj) 、show(A obj)两个方法,所以a2.show(b)应该调用show(A obj)方法,B中重写了该方法,所以运行时JVM会调用B类中重写的show(A obj)方法,所以输出B and A;a2.show(d)应该调用show(D obj)方法,B中没有重写该方法所以调用的为A类中的该方法,所以输出为A and D;show(D obj) 、B类中show(B obj) 、B类中show(A obj)方法,所以输出如上。总结
以上就是关于Java面向对象知识点整理的全部内容了,希望本文的内容对大家学习或者使用java能带来一定的帮助,如果有疑问大家可以留言交流。
# java面向对象
# java面向对象的理解
# java面向对象编程
# Java面向对象编程(封装/继承/多态)实例解析
# 全方位讲解Java的面向对象编程思想
# Java基础教程之Hello World到面向对象
# java实现学生管理系统(面向对象)
# Java面向对象的三大特征
# 深入java内存查看与分析详解
# 深入分析Java内存区域的使用详解
# 详解Java 中程序内存的分析
# Java面向对象和内存分析图文详解
# 子类
# 重写
# 类中
# 抛出
# 可以用
# 返回值
# 是一个
# 面向对象
# 第一个
# 哺乳动物
# 写了
# 多态
# 来实现
# 则会
# 完全相同
# 自己的
# 都是
# 第六个
# 几个
# 出了
相关文章:
湖北网站制作公司有哪些,湖北清能集团官网?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
如何在VPS电脑上快速搭建网站?
清除minerd进程的简单方法
青岛网站建设如何选择本地服务器?
如何快速打造个性化非模板自助建站?
微信小程序 input输入框控件详解及实例(多种示例)
如何快速辨别茅台真假?关键步骤解析
图册素材网站设计制作软件,图册的导出方式有几种?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
C#怎么使用委托和事件 C# delegate与event编程方法
Python路径拼接规范_跨平台处理说明【指导】
香港服务器网站推广:SEO优化与外贸独立站搭建策略
如何在腾讯云免费申请建站?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
如何在宝塔面板中修改默认建站目录?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
如何确保西部建站助手FTP传输的安全性?
如何确保FTP站点访问权限与数据传输安全?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
制作宣传网站的软件,小红书可以宣传网站吗?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
,购物网站怎么盈利呢?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
如何有效防御Web建站篡改攻击?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
如何用狗爹虚拟主机快速搭建网站?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
如何快速搭建支持数据库操作的智能建站平台?
c++ stringstream用法详解_c++字符串与数字转换利器
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
网站制作报价单模板图片,小松挖机官方网站报价?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
建站主机CVM配置优化、SEO策略与性能提升指南
开封网站制作公司,网络用语开封是什么意思?
历史网站制作软件,华为如何找回被删除的网站?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站主机如何选?性能与价格怎样平衡?
如何彻底删除建站之星生成的Banner?
网站制作新手教程,新手建设一个网站需要注意些什么?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
文字头像制作网站推荐软件,醒图能自动配文字吗?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
广东企业建站网站优化与SEO营销核心策略指南
*请认真填写需求信息,我们会在24小时内与您取得联系。