1 import java.util.Scanner; 2 3 public class PersonDemo { 4 public static void main(String[] args){ 5 6 person p1 = new person("Xiaolei", 20); 7 p1.setName("lifang"); 8 String newname = p1.getName(); 9 System.out.println(newname); 10 11 12 } 13 } 14 15 class person{ 16 String name; 17 int age; 18 person(String name, int age){ 19 20 System.out.println(name + " age is " + age); 21 cry(); 22 } 23 24 25 public void setName(String n){ 26 name = n; 27 } 28 public String getName(){ 29 return name; 30 } 31 32 public static void cry(){ 33 System.out.println("cry..."); 34 } 35 }
最近学完了core java的第四章类与对象部分,还是觉得要来做一个总结,因为很多特性在学习后会开始遗忘,好记性不如烂笔头。
java是一门面向对象的语言。
类
类是是一个具有相同特性的所有元素的大集合,是创建的对象模板存放的地方,创建的对象成为类的实例。每要创建一个对象,它就要有相对应的类,类中有对象的属性,对象的初始化,对象所依赖的方法等。
类与类之间有三个关系
1.依赖 一个类需要访问另一个类里面的信息
2.继承 一个类B和类A有关系,但是B存在除了A以外的多余功能,那么就说类B继承类A。A成为超类,B称为子类。如经理manager是超类,员工staff是子类。用extends关键字
class B extends A { }
因此,子类的功能比超类更丰富,在设计类的时候应该将通用的方法放在超类中,而将特殊的功能放在子类中。当需要调用子类继承超类的变量时,用super关键字,如super.risemoney。
在继承的时候,子类唯一没有继承的是超类的构造方法,所以要用super关键字来指定调用超类中的构造方法。
B(){
super(参数列表);
}
否则就会出现错误。因为java不会给已经有了构造函数的类自动添加构造方法。所以解决办法也可以在原来的超类中自动添加一个空的构造函数。
3.聚合
在实现一个类的时候,由于公有数据十分危险,所以应当将所有的数据域设计为私有的,通过private关键字。
对象
1.对象的行为———— 可以对对象施加哪些操作,可以对对象施加哪些方法。
2.对象的状态———— 当施加那些方法的时候对象是怎么响应
3.对象的标识———— 如何辨别具有相同行为和状态的不同对象
//这样很影响代码的阅读性
class person { String name; int age; person(String name, int age) { name = name; age = age } }
所以使用this关键字就是区分隐式参数和显式参数。显式参数即在括号内的参数,隐式参数没有直接传递到。
//这是修改后的代码 class person { String name; int age; person(String name, int age) { this.name = name; this.age = age } }
this的作用可以理解为引用的的对象替代。这个写法可以将实例域和局部变量明显的区分开。
final实例域
如果在构造器构造一个值以后,某个域在后续的操作中不能再修改,那么使用finnal关键字。 private final String name
静态域与静态方法
static关键字
静态域是所有类都共有(共享)的一个域,每个域都会在这里获得一份拷贝。即如果好几个类都会有相同的部分,操作或者是实力域,那么可以创建一个静态的类,在里面放这个共享的东西。如果不加static关键字的话,那么只有这个类的对象可以调用。
- 封装对象
构造函数是对对象进行的封装
- 封装对对象的操作
将对对象的操作,包括功能,判断等进行封装,由对象进行调用
- 封装对象的内部数据
对某些数据用private修饰可以隐私化,这些数据不能被篡改,只能通过对应的修改和取得方法去改变
匿名内部类
new 父类/接口() {
//类本体操作
};