Java SE基础–OOP开始(通俗易懂版快速了解是什么东西、干嘛用)
面向对象
类与对象的创建
一个程序只有一个主类–包含main方法
//方法
//学生类
public class Student{
//类只有属性和方法。
String name;
int age;
public void study(){
System.out.println("")
}
}
//主方法
public class Application{
pubic static void main(String[] args){
Student xiaoming =new Student();
xiaoming.name="王小明";
xiaoming.age=3
}
}
构造器
无参构造器
public class Person{
}
public class Application{
public static void main(String[] args){
Person p=new Perosn();
//此时已经实例了一个Person对象
/*
new Person()===> 在Person中执行了
public class Person{
public Person(){
---该方法就是默认的构造方法-无参构造
1.构造方法跟类名一样
2.不能有返回值(自我理解:构造的方法:给其他人使用时自由发挥不能规定死返回值,void都不可以有)
}
}
*/
}
}
有参构造器
public class Person{
String name;
public Person(){
//无参构造器
this.name="wangliu"
}
public Person(String name){
//有参数构造器
this.name=name;
}
}
构造器的作用
1.new创建一个对象,必须有构造器,默认有一个无参构造器
2.有参数构造定义--必须要显示定义无参数构造
3.最重要的使用是用来初始化值
4.idea中alt+insert 选择getter和setter方法(一键生成)
封装(该漏的漏该藏的藏,内部自己操作,给用户接口来使用–高内聚、低耦合)
1.属性私有--只可以给当前类获取
public class Student {
public String name;
public int score;
}
>>>改为
public class Student {
private String name;
private int score;
//现在这些属性-外部类是不能操作的
}
2.提供操作私有属性的 公共方法给用户用(接口)
//get set 方法
public class Student {
private String name;
private int score;
public String getName(){
return this.name;
}
publid void setName(String name){
this.name=name;
//这样外部类就可以调用这个函数来操作Student的值了
/*
如
public static void main(String[] args){
Student s1=new Student();
s1.setName("zhasngsan");
--现在Student的值已经被初始化了--
打印 s1.getName
}
*/
}
}
封装方法使用案例–此处展示封装安全性保护数据被恶意破坏
public class Student {
private String name;
private int age;
//getter and setter 方法省略(使用快捷键生成即可)--保留举例的一个set方法
public void setAge(int age){
//可以通过set来设置校验输入的值
if(age>200||age<0){
this.age=1;//非法数据默认设置1岁
}
else{
this.age=age;
}
}
}
.....main(String[] args){
Student s=new Student();
s.setAge(70);
se.setAge(1000);
}
封装的作用
- 数据隐藏:
- 封装允许开发者隐藏对象的状态信息,只暴露必要的方法来与这些状态进行交互。这样可以防止外部代码直接修改对象的内部状态,从而保证了数据的安全性。
- 接口控制:
- 通过提供公共的方法(API),封装确保了对外部世界展现一个清晰且受控的接口。这使得对象的行为更加可预测,并且易于维护。
- 提高模块化:
- 封装有助于将程序分解成更小、更易管理的部分。每个部分(类或对象)负责处理特定的任务,这有助于降低系统的复杂度。
- 简化使用:
- 使用封装后,用户不需要了解对象内部是如何工作的,只需要知道如何调用方法即可。这降低了学习成本,并使程序更加易于使用。
- 增强灵活性和可扩展性:
- 当需要改变对象的内部实现时,只要不改变对象提供的公共接口,其他依赖该对象的代码就不需要做任何更改。这使得程序更容易适应变化,并且便于添加新功能。
继承(对某一批好的东西(类)延续吸取,构建美好世界)
public class Xiaoming extends XiaomingFather {
// Xiaoming 类的具体实现
}
public class Teacher extends Person {
// Teacher 类的具体实现
}
public class XiaomingFather extends Person {
// XiaomingFather 类的具体实现
}
public class Person {
// Person 类的具体实现
}
1只能单继承(一个儿只有一个爹)即是:一个类后面只能跟一个extends,但是可以树层级继承
2.子类继承父亲:就继承父的所有方法和属性–但是只可以用公有的(一般属性会有私有的,方法一般不是私有)
3子类不能使用父私有的的东西–如父类私有的私房钱放在你不知道的地方,一辈子你都不知道,根本没法调用,但是你找到一个笔记本上记录着如何找到存放位置(就是父亲提供的getter、setter方法,如果有就可以通过方法拿到属性(私房钱),如果没有就拿不到)
4.所有类都继承Object类-祖先类,为了理解如果爷爷、父亲、你把所有属性方法都去掉,你仍然可以调用一些方法属性就是提供的
super与this
this调用当前类的属性和方法、super调用父类的属性和方法(可以是protected,但是private还是不可!!!)
此处有个注意:默认无参构造器先执行:,如果子类中的无参构造器被调用了则父类的无参构造会先调用