Java基础(3)
2022/7/1 1:22:29
本文主要是介绍Java基础(3),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
面向对象编程
-
面向对象:先分类,然后使用面向过程思想具体实现每一个类的功能 * 适合复杂的多人协作的大型项目
-
面向过程:一步一步考虑怎样实现功能(线性) * 适合简单的项目实现
特性:继承,封装,多态
从认识角度:先有对象后有类
从代码角度: 先有类后有对象
本质:以类的方式组织代码,以对象的方式封装数据
类与对象
类是一个抽象的集合,对象是一个类的实例化
构建类:
public class person{ //一个文件里只有一个public的类 //属性 String name; int age; //方法 public void print(){ System.out.println("输出"); } }
实例化类:
使用new关键字创建对象的时候,除了会给它在内存上创建空间之外,还会给这对象初始化,以及对构造器调用
public class test{ public static void main(String[] agrs){ person man=new person(); //构造一个对象,将类实例化 //将对象赋值 man.name="xiaoming"; man.age=21; //调用类中的方法 man.print(); } }
构造器(构造方法):
public class student{ //属性 String name; int number; //无参构造 (显示定义)默认也存在 public student(){ } //有参构造 public student(String name){ this.name=name; } //方法 }
构造器定义:修饰符 构造器名(){ }
没有返回值,构造器名与类名相同
alt+insert 选择construct 快捷键生成构造器
作用:1.对对象初始化
2.使用new,其实就是在调用构造方法(构造器)
当一个类里存在有参构造时,想要使用无参构造就必须将其显示定义出来。
在重写了有参构造之后,最好将无参构造显示的也写出来
封装
主题思想:属性私有,使用get/set调用修改
快捷键:alt+insert 选择get and set
作用:1. 使代码具有良好的可维护性和安全性
2.统一接口
public class pet{ //封装属性 private String name; private int age; //用public编写调用方法get/set public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
继承
-
继承是对某一些类的抽象,从而更好的对现实世界建模
-
子类继承父类的所有公有的方法和属性,私有的不能被继承
-
在Java中一个父类可以有多个子类,但一个子类有且仅有一个父类
-
所有的类都直接或间接的继承Object类
定义:子类名 extends 父类名
public class person{ //一个文件里只有一个public的类 //属性 private String name; private int age; //方法 public void print(){ System.out.println("输出"); } public String setName(String name){ this.name=name; } public int setAge(int age){ this.age=age; } public String getName(){ return name; } public int getAge(){ return age; } } public class teacher extends person{ } 调用teacher类时,可以使用public方法,但是属性是其私有的,不可以继承
super和this
super用来调用父类的构造方法
this用来调用本身的相关属性或方法
二者不能同时调用构造器
public Student(){ super(); //this();调用本身构造器,必须写在第一行; super()调用父类构造器,也必须写在第一行。 二者不能同时出 System.out.println("成功调用子类"); } public void test(){ super.test(); System.out.println("子类的"); }
注意:
-
在new一个子类时,会先调用父类的构造器,再调用子类构造器
-
super必须写在子类方法的第一行,否则会报错
-
如果父类重写了有参构造,则子类构造起中不能使用super(),必须要写super(参数)形式,不然会报错;
方法重写
要求:1.必须是非静态方法(静态方法不能被重写)
2.必须使用public修饰符,不能使用private,范围可以扩大不能缩小 修饰符优先级:public->protected->default->private
3.方法名相同,参数列表相同
4.抛出异常:只能缩小不能扩大
静态方法:只和构造对象时的数据类型有关,不存在重写
public static void main(String[] agrs){ A a=new A(); B b=new A(); a.test(); //A b.test(); //B } public class A extends B{ public static void test(){ System.out.println("A"); } } public class B{ public static void test(){ System.out.println("B"); } }
非静态方法:表示A类将B类的test方法重写了
public static void main(String[] agrs){ A a=new A(); B b=new A(); a.test(); //A b.test(); //A } public class A extends B{ @override //重写 public void test(){ System.out.println("A"); } } public class B{ public void test(){ System.out.println("B"); } }
多态(方法的多态)
-
构建一个对象时,引用类型在对象名左边,实际类型在对象名右边
//A继承B A a=new A(); 引用类型与实际类型相同,都是A B a=new A(); 引用类型为B,实际类型为A *父类的引用指向子类
2.若只在子类里存在的方法,父类引用构建的对象就不能调用(类型转换异常 ClassCastException)
若只在父类里存在的方法,则都可以调用该方法
若子类将父类方法重写了,则都可以调用该方法
3.存在条件:继承关系,方法重写,父类对象指向子类
这篇关于Java基础(3)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-0601-电商商品中心解密:仅凭SKU真的足够吗?
- 2024-05-01为什么公共事业机构会偏爱 TiDB :TiDB 数据库在某省妇幼健康管理系统的应用
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能