❤️ Author: 老九
☕️ 个人博客:老九的CSDN博客
🙏 个人名言:不可控之事 乐观面对
😍 系列专栏:
文章目录
- 什么是类,对象
- 类和类的实例化
- 字段的初始化
- 类中实现方法
- static 静态关键字
- 封装
- private 封装
- setter 和 getter 方法
- 构造方法
- this关键字
- 继承
- protected 关键字
- java对于字段的方法的四种访问权限
- final关键字
什么是类,对象
因为计算机并不能像我们人这样去理解世界上的东西,所以为了更好的编辑,就抽象出了类和对象。类就是把功能放在一起,然后由一个人去调用这个功能,然后再编辑对应的功能。调用者就是对象的实现者
类和类的实例化
类是一类对象的统称,对象就是这一类具体化的实例
创建类的关键字:class
举例:我们坐年糕的模子就是一个类,而通过这个模子可以做出月饼。在这个例子当中,类就是模具,年糕就是实例化的对象。一个类可以实例化很多对象。举例:
class Person {
public String name;
public int age;
}
public static void main1(String[] args) {
Person person1 = new Person();
Person person2 = new Person();
Person person3 = null;
}
Person 就是一个类,里面的 name 和 int 就是类的成员(字段)。这里的 person1 就是引用,指向的是后面 new 的对象,因为是引用,所以也可以指向 null 。person3 就是指向空(null)引用。person1 person2 person3 就是实例化的对象。
字段的初始化
字段就是类里面的成员。在创建这些成员的时候就可以初始化。例如:
class Person {
public String name = "Lockey";
public int age = 10;
}
类中实现方法
class Person {
public String name;
public int age;
public void print() {
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public static void main(String[] args) {
Person person1 = new Person();
person1.name = "Lockey";
person1.age = 10;
person1.print();
}
static 静态关键字
static 可以修饰方法,属性。要注意的是:static 修饰的变量通过类名访问。
class Person {
public int a;
public static int count;
}
public static void main(String[] args) {
Person person1 = new Person();
person1.a++;
person1.count++;
System.out.println(person1.a);
System.out.println(Person.count);
Person person2 = new Person();
person2.a++;
person2.count++;
System.out.println(person2.a);
System.out.println(person2.count);
}
如图,count 第二次输出为 2 。这是因为 conut 是被 static 修饰的变量,被 static 修饰之后就变成了常量,就在静态区了。所以每个引用当中调用的 count 没变。所以第二次改变 count 的值的时候,就变成 2 了。当 static 修饰方法的时候,无需再创建对象,直接拿类名调用就行了。举例:
class Person {
public static int count;
public static void change() {
count = 100;
}
}
public static void main(String[] args) {
Person.change();
System.out.println(Person.count);
}
通过类名的调用直接访问 static 修饰的变量。
封装
因为代码实现的软件很复杂,所以就出现了类,但是为了阅读性更高,就出现了封装。就是把一个类的内容实现为只剩一个或几个接口,方便类的调用者访问,这样就降低了代码的复杂程度。
private 封装
private 就是修饰成员变量或方法的关键字,被 private 修饰之后,就不能被类外的调用者访问了。所以就可以配合 public 来实现对外的接口。例如:
class Person {
private String name = "Lockey";
private int age = 10;
public void print() {
System.out.println("名字是:"+name+" 年龄:"+age);
}
}
public static void main(String[] args) {
Person person = new Person();
person.print();
}
这里就是利用 private 封装属性,使其只能在类内被访问到。而提供的 public 接口,就让类的调用者在类外就可以访问到了。所以在类外直接调用 print 方法就好了。
setter 和 getter 方法
当我们把字段(name age)设置为 private 属性时,就无法在类外进行初始化了,所以就又出现了新的方法:
class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name1) {
name = name1;
}
public int getAge() {
return age;
}
public void setAge(int age1) {
age = age1;
}
public void print() {
System.out.println("名字是:"+name+" 年龄:"+age);
}
}
public static void main(String[] args) {
Person person = new Person();
person.setName("Lockey");
person.getName();
person.setAge(10);
person.getAge();
person.print();
}
这里就是调用 getter 和 setter 方法,在类外进行访问,因为 private 对 name 和 age 做了封装。
构造方法
方法名和类名是相同的,且构造方法没有返回值。调用完构造方法之后,对象才会产生。
一个对象的产生:
1 为对象分配内存。
2 调用合适的构造方法。
class Person {
public Person() {
System.out.println("Person 不带参数的构造方法");
}
}
public static void main(String[] args) {
Person person = new Person();
}
这里就是实例化类的对象的时候调用的构造方法,因为我们自己写了构造方法,所以这里就调用我i们写过的。就输出了如图所示的内容。需要注意的是:如果没有实现如何的构造方法,编译器会帮我们默认生成有个不带参数的构造方法。也就是说,一个类,至少会有一个构造方法。
除了上面这种构造方法,我们还能写带有参数的构造方法。例如:
class Person {
private String name;
public Person(String name1) {
name = name1;
System.out.println("Person(String) 带一个参数的构造方法");
}
}
public static void main(String[] args) {
Person person = new Person("Lockey");
}
如图:在类初始化的时候,传入参数 “Lockey” 在类实例化的时候就是调用有参数的构造方法。既然能传参数,那是否可以传多个参数呢?答案是可以的。例如:
class Person {
private String name;
private int age;
public Person(String name1, int age1) {
name = name1;
age = age1;
System.out.println("Person(String, int) 带两个参数的构造方法");
}
}
public static void main(String[] args) {
Person person = new Person("Lockey",10);
}
如图,调用的就是传了两个参数的构造方法。通过观察上面的例子,我们可以发现:构造方法也是支持重载的。
this关键字
在类当中,this 表示当前对象的引用(不是当前对象),可以通过 this 来访问类当中的字段和方法。用 this 的话,会降低出现 bug 的概率,并且增加代码的可读性。例如使用 getter 和 setter 的时候,就可以用 this ,能多用 this 就多用 this 。
class Person {
private String name;
private int age;
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;
}
}
继承
在创建的类当中,是为了给一些抽象的事物提供一些方法。如果一些类、一些食物有共同的属性,那么就可以把这些属性封装为一个类。然后其它事物有这个属性的时候,就去继承这个类。通过 extends 关键字去继承。就比如说:猫和鸟,它们的共同特点都有名字和吃。所以就可以把名字和吃放在一个类里面。然后让它们去继承,降低代码量。把被继承的这个类叫做 Animal 可以发现猫和鸟对于 Animal 都是一种 is-a 的关系。在继承的时候,也会继承父类(Animal)的字段和方法。
class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public void eat(String food) {
System.out.println(this.name + "正在吃" + food);
}
}
class Cat extends Animal {
public Cat(String name) {
// 使用 super 调用父类的构造方法.
super(name);
}
}
class Bird extends Animal {
public Bird(String name) {
super(name);
}
public void fly() {
System.out.println(this.name + "正在飞 ︿( ̄︶ ̄)︿");
}
}
public class Test4 {
public static void main(String[] args) {
Cat cat = new Cat("小黑");
cat.eat("猫粮");
Bird bird = new Bird("圆圆");
bird.fly();
}
}
子类在调用父类的构造方法的时候,要用到 super 关键字。用 super 关键字去把参数传进去。运行结果如下:
bird 就是在 Animal 继承的基础上又扩展出了 fly 方法。
如果把 name 的 public 改成 private 那么子类就访问不到了:
class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void eat(String food) {
System.out.println(this.name + "正在吃" + food);
}
}
protected 关键字
因为把访问权限设置为 private 就会导致子类不能访问。如果是 public 就会导致失去封装的意义。所以就可以使用 protected 。因为对于类的子类和同一个包的其他类来说,protected 修饰的字段是可以访问的。
class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public void eat(String food) {
System.out.println(this.name + "正在吃" + food);
}
}
class Cat extends Animal {
public Cat(String name) {
// 使用 super 调用父类的构造方法.
super(name);
}
}
class Bird extends Animal {
public Bird(String name) {
super(name);
}
public void fly() {
System.out.println(this.name + "正在飞 ︿( ̄︶ ̄)︿");
}
}
public class Test4 {
public static void main(String[] args) {
System.out.println("保护权限下的访问");
Cat cat = new Cat("小黑");
cat.eat("猫粮");
Bird bird = new Bird("圆圆");
bird.fly();
}
}
java对于字段的方法的四种访问权限
private: 类内部能访问, 类外部不能访问
默认(也叫包访问权限): 类内部能访问, 同一个包中的类可以访问, 其他类不能访问.
protected: 类内部能访问, 子类和同一个包中的类可以访问, 其他类不能访问.
public : 类内部和类的调用者都能访问
final关键字
之前学过,用 final 来修饰常数的时候,这个数不能被修改。所以用 final 来修饰类的时候,此时被修饰的类就不能被继承。
final class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public void eat(String food) {
System.out.println(this.name + "正在吃" + food);
}
}
class Cat extends Animal {
public Cat(String name) {
// 使用 super 调用父类的构造方法.
super(name);
}
}
class Bird extends Animal {
public Bird(String name) {
super(name);
}
public void fly() {
System.out.println(this.name + "正在飞 ︿( ̄︶ ̄)︿");
}
}
public class Test4 {
public static void main(String[] args) {
Cat cat = new Cat("小黑");
cat.eat("猫粮");
Bird bird = new Bird("圆圆");
bird.fly();
}
}
♥♥♥码字不易,大家的支持就是我坚持下去的动力♥♥♥
版权声明:本文为CSDN博主「亚太地区百大最帅面孔第101名」的原创文章