面向对象编程oop
对于复杂的事物,我们需要面向对象的思想,就是不断细化分类,到最后一级再用面向过程的思想处理
补充方法的调用
加上static就是静态方法,反之就是非静态方法.
跨包调用:静态方法可以跨包使用,形式为类名.方法名如
student.score();
非静态方法调用需要实例化,形式为
Student student=new Student();
student.score();
同一个包调用:设有a,b两个方法
若同为静态方法或非静态方法,就可以在a里调用b,b里调用a
静态与非静态方法的调用区别
不是静态方法都需要实例化,静态可直接调用,无论是否跨包
引用传递与值传递
引用传递
public class Dome05 {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);
change(person);
System.out.println(person.name);
}
public static String change(Person person){
person.name="lll";
return person.name;
}
}
class Person{
String name;
}
值传递
public class Demo06 {
public static void main(String[] args) {
int a=10;
System.out.println(a);
Demo06.change(a);//返回为空,a还是10
System.out.println(a);
}
public static void change(int a){
int b=20;
a=b;
}
}
类与对象的创建
类是一种抽象的数据类型,对象就是抽象概念的具体实例
面向对象编程的本质就是以类的方式组织代码,一对象的组织封装数据
注意:1.一个项目规范来说只有一个main方法,调用需要实例化
2.不同的类会在栈中生成对应的对象,对象名就是引用变量名,与堆中的模版对接赋值
3.this.属性是方法里的,可以用传进来的参数对他赋值
构造器
实例化的是方法,而类也能实例化的原因就是存在构造器,即使什么都没有,也会存在一个隐形的方法
特点:1.必须与类的名字相同
2.没有返回类型,也不能写void
3.new的本质就是调用构造器
4.定义有参构造后,无参必须显示定义,ALT+insert快捷键
封装
高聚合:类的内部数据操作自己完成,不允许外部操作,用private修饰符封装
低耦合:仅暴露少量的方法给外部使用,ge或set
特点:
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 系统的可维护性增加
演示
student类
public class Student {
private int age;//封装
//接收并返回数据
public int getAge(){
return age;
}
//设定数据
public void setAge(int age){
this.age=age;
}
}
main方法
Student s1 = new Student();//创建新对象s1
s1.setAge(20);//调用方法将年龄设为20
System.out.println(s1.getAge());
继承
特点:
-
继承是类与类之间的关系,除此之外还有聚合,组合,依赖
-
继承之间有父类,子类继承父类,两者有从属关系,用extends表示
格式为 修饰符+类型+子类名+extends+父类名
-
子类继承父类的一切方法,CTRL+H可以看继承关系
-
修饰符中public优先级最高,继承一般用public.而属性一般是私有的,封装属性再用get,set进行操作
-
所有的类都默认直接或间接继承object,类似于构造器的无参构造
-
Java只有单继承,没有多继承,也就是说一个子类只有一个父类,而父类有多个子类
演示
person类,父类
public class Person {
public void say(){
System.out.println("他说你好,我是你们的Java老师");
}
}
Teacher类,子类
public class Teacher extends Person{
private String course;//封装
public String getCourse(){
return course;
}
public void setCourse(String course){
this.course=course;
}
}
main方法,由于子类继承父类的say()方法,所以teacher对象也可以使用
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.setCourse("java");
System.out.println("教导的科目是:"+teacher.getCourse());
teacher.say();
}