目录
1.封装:对象代表什么,就得封装对应的数据(变量),并提供数据对应的行为(方法)。
2.继承:描述的时事物之间的所属关系,这种关系是:is-a的关系
2.6.3.继承中成员方法访问特点:this调用遵循就近原则,谁离我近,我就用谁,先自己,后父类;super调用则直接访问父类方法。
1.封装:对象代表什么,就得封装对应的数据(变量),并提供数据对应的行为(方法)。
java中的封装是指将类的数据成员和方法进行保护,使得外部无法直接访问和修改,只能通过类提供的公共接口来进行访问和操作。封装能够隐藏类的实现细节,提高类的安全性和可维护性。
在Java中,封装通过访问修饰符来实现,常用的访问修饰符有private、protected和public。其中,private修饰符表示只有在类内部才能访问,protected表示只有在该类和其子类中才能访问,public表示任何地方都可以访问。
封装的主要好处包括:
-
提高了类的安全性,防止代码被恶意修改。
-
实现了代码的隐藏,使得类的内部实现细节对外部不可见,方便维护和更新。
-
封装还可以降低类之间的耦合,减少不必要的依赖,提高代码的可重用性和可扩展性。
总之,封装是Java中面向对象编程的基本概念之一,它能够提高代码的可靠性和可维护性,是 Java 程序设计的重要组成部分。
1.1.类的定义及对象创建
类的定义格式如下:
修饰符 class 类名{
//1.成员变量(属性);
//2.成员方法(行为);
//3.构造方法(初始化类的对象数据);
}
对象创建格式如下:
类名 对象名= new 类名();
1.2.类的成员变量与局部变量区别
1.3.类的构造方法:
构造方法:也叫构造器,构造函数,作用并不是用来创造对象的,只是创建对象过程中给成员变量进行初始化的一个步骤。
构造方法格式:
- 构造方法的名称必须与类名相同。
- 构造方法没有返回类型,包括void类型。
- 构造方法可以有参数,也可以没有参数。
- 构造方法的访问修饰符可以是public,protected和private。
- 如果没有显式定义构造方法,编译器会自动生成默认空参构造方法,显示定义了则不再提供默认构造方法。
public class Student{
修饰符 类名(参数){
方法体;
}
}
执行时机:
1.创建对象的时候由虚拟机调用,不能手动调用构造方法
2.每创建一次对象,就会调用一次构造方法
1.4.创建对象的内存加载过程
1.4.1.生成一个对象内存加载过程:
1.4.2:生成两个对象内存加载过程:
1.4.3:两个引用指向同一个对象内存加载过程:
1.5.基本数据类型和引用数据类型说明
1.6.this关键字的使用
就近原则和this关键字:
在如下代码案例中,调用printInfo方法
System.out.println("Age: " + age):遵循就近原则,先取最近的局部变量,没有时再取成员变量,如果父类有同样的成员变量,依然遵循就近原则,先访问自己的成员变量,如果要用自己的成员变量使用this.成员变量;要用父类的使用super.成员变量;在子类中只能访问一级父类的,父类的父类有相同的成员变量不能使用super访问了;
System.out.println("Age: " + this.age):this的作用用来区分成员变量和局部变量,直接取值为成员变量,其本质代表的时方法调用者的地址值。
public class Person {
private int age;
public void setAge(int age) {
this.age = age;
}
public void printInfo() {
int age = 10;
System.out.println("Age: " + age);
System.out.println("Age: " + this.age);
}
}
1.7.标准JavaBean类创建规范
扩展知识:标准的JavaBean类创建(IDEA中PTG插件可以快捷生成):
- 类名需要见名知意。
- 成员变量使用private修饰。
- 至少提供两个构造方法,无参构造和有参构造。
- 成员方法:提供每一个成员变量对应的set和get方法,如果由其他行为则提供对应行为的方法。
1.8.static关键字
2.继承:描述的时事物之间的所属关系,这种关系是:is-a的关系
2.1.什么是继承.继承的好处是什么:
继承是面向对象三大特征之一,可以让类跟类之间产生子父的关系,可以把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码冗余,提高代码的复用性
2.2.继承的格式:
public class 子类 extends 父类{}
2.3.继承后子类的特点
子类可以得到父类的属性和行为,子类可以使用
子类可以在父类的基础上新增其他功能,使子类更强大
2.4.继承的内存图
2.5.什么时候用继承
当类与类之间,存在相同共性的内容,并满足子类是父类的一种,就可以kao'l使用继承来优化代码
2.6.继承的特点
2.6.1.子类到底能继承父类中的哪些内容
1)子类继承构造方法:不能被继承
2)子类继承成员变量:成员变量都能被继承,知识私有的成员变量不能直接访问,需通过对应的set和get方法访问
3)子类继承成员方法:只有在虚方法表中的方法才会被子类继承
2.6.2.继承中成员变量访问特点:就近原则
2.6.3.继承中成员方法访问特点:this调用遵循就近原则,谁离我近,我就用谁,先自己,后父类;super调用则直接访问父类方法。
方法的重写:本质是覆盖虚方法表中的方法。
只有被添加到虚方法表中的方法才能被重写,private,static,final修饰的方法不能被添加到虚方法表中。
2.6.4.继承中构造方法的访问特点
父类中的构造方法不会被子类继承。
2.7.this、super使用总结:
在方法调用时局部变量参数相当于有一个代表方法调用者地址值的参数隐藏传递到方法中。特例:在子类的构造方法中再调用其他子类构造方法时不会再添加super(),因为在其他子类构造方法中会默认添加super(),否则会重复,由于super()必须在第一行,所有再调用其他子类构造方法时前面不允许带执行其他代码。如下图:
输出语句写在构造方法前面报错:
3.多态:
3.1. 多态的运行特点:
调用成员变量时:编译看左边,运行看左边
调用成员方法时:编译看左边,运行看右边
说明:
Fu f = new Zi();
System.out.println(f.name);
//编译看左边的父类中有没有name这个属性,没有就报错
//在实际运行的时候,把父类name属性的值打印出来
f.show();
//编译看左边的父类中有没有show这个方法,没有就报错
//在实际运行的时候,运行的是子类中的show方法
示例如下:
public class Animal {
private String name;
public void setName(String name){
this.name = name;
}
public void eat() {
System.out.println("Animal is eating");
}
}
public class Dog extends Animal {
private String name = "Dog";
public void eat() {
System.out.println("Dog is eating");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog();
System.out.println(animal.name);//
System.out.println(animal.name);
animal1.eat(); // Animal is eating
animal2.eat(); // Cat is eating
animal3.eat(); // Dog is eating
}
}
3.2.多态的好处
3.3.多态的弊端
不能调用子类的特有功能,如果需要调用子类独有的功能,需要强制转换为子类类型。
注意点:不能随意转换,如果转换成其他类型会报类型转换异常,建议使用 instance of判断类型是否正确后再转换。
4.包的使用说明
5.final关键字
不可改变,最终的含义。可以用于修饰类、方法和变量。
- 类:被修饰的类,不能被继承。String类用final修饰不能被继承,字符串是不可变的
- 方法:被修饰的方法,不能被重写。
- 变量(局部变量,成员变量):被修饰的变量,有且仅能被赋值一次。
6.权限修饰符
7.代码块