面向对象的简单的例子
public class Cat {
/**
* 身长
*/
int size;
/**
* 颜色
*/
String coulour;
/**
* 吃什么
*/
public static void eat() {
System.out.println("吃罐头");
}
}
2、成员变量与局部变量
成员变量 在类中定义,用来描述对象将来要有什么 在类中定义,在方法中临时保存 没有赋值,为初始值 与局部变量的区别
1作用域不同 -局部变量的作用域仅限于定义它的方法 -成员变量的作用域在整个类内部都是可见的
2初始值不同 -成员变量有默认的初始值 -局部变量没有默认的初始值,必须自行设定初始值
3同名变量 -在同一个方法中不允许有同名的局部变量 -在不同的方法中可以有同名的而局部变量
4存储位置不同 -成员变量在对象创建后存储在堆中,对象回收后消失 -局部变量是在方法被调用时存在于栈中,方法调用结束,从栈中消失
5生命周期不同 -随着对象的创建而创建,对象回收后消失 -随着方法的调用而创建,随着方法执行结束而消失
3、方法的调用
/**
* 静态方法
*/
public static void sleep() {
System.out.println("睡觉");
}
public static void eat() {
System.out.println("吃饭");
}
public void drink() {
System.out.println("喝水");
}
静态方法可以静态方法可以用类名.方法名的方式调用用类名.方法名的方式调用,但是不能通过该静态方法可以用类名.方法名的方式调用,但是不能通过该方式调用非静态方法,可以通过类的实例化对
4、匿名对象与引用对象
匿名对象
没有指向,用完之后立刻消失
引用对象
person04 引用类型变量 引用了内存中的一个对象
可能会多次调用,不会立即删除
5、访问修饰符
访问修饰符有 public protected default private
public : 对所有类可见 使用对象:类、接口、变量、方法
protected : 对同一个包内的类和所有子类可见。使用对象:变量、方法。 注意:不能用来修饰类(外部类)
default: 在同一个包内可见,不适用任何修饰符,使用对象:类、接口、变量、方法
private :只在同一个类内可见。使用对象:方法、变量。 注意:不能用来修饰类(外部类)
7、封装
减少耦合性,类内部的结构可以修改,可以控制变量成员,可以隐藏信息
8、构造方法
方法名与类名相同,方法体没有返回值,但是在声明的时候却不需要使用void修饰的方法称之为构造方法
没有参数的方法称之为无参构造方法
代码中没有编写过构造方法,jvm在执行对象初始化的帮助程序追加无参构造方法
一个类中,既没有无参构造方法也没有有参构造方法的时候jvm会追加一个无参构造方法
一个类中,存在有参构造方法没有编写无参构造方法的时候jvm不会追加无参构造方法
不论任何情况下一定要手写一个无参构造方法
在类的实例化过程中被调用,实例化几次调用几次
无参构造方法的表示:
public class Person01 {
public Person01() {
}
}
全参构造方法的表示方法:
public class Person02 {
//昵称
private String nickname;
//性别 1男0女
private int gender;
//年龄
private int age;
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
/**
* 全参构造方法
* @param nickname 昵称
* @param gender 性别
* @param age 年龄
*/
public Person02(String nickname,int gender,int age) {
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
}
9、代码块的生成
花括号包裹起来的我们称之为代码块或代码段
只有一对花括号包裹起来的我们称之为构造代码块或代码段
构造代码块与构造方法一样都是在类被实例化的过程中被调用的,并且构造代码块在构造方法之前先执行
类每次被实例化的过程中都会调用构造代码块
{
System.out.println("构造代码块");
}
10、类的继承
1、子类继承父类
public class Person {
/**
* 昵称
*/
private String nickname;
/**
* 性别,1→男 0→女
* 默认值为0,女
*/
private int gender;
/**
* 年龄
*/
private int age;
public Person() {
super();
}
public Person(String nickname, int gender, int age) {
super();
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
子父类关系
public class Person {
public void eat() {
System.out.println("吃");
}
}
父类
12345 //父类Person子类Malepublic class Male extends Person
{ public void work() {
System.out.println("work");
}
}
子类
向上转型与向下转型
public class Person {
public void eat() {
System.out.println("吃");
}
}
父类
public class Male extends Person {
@Override
public void eat() {
System.out.println("吃核桃");
}
public void work() {
System.out.println("work");
}
}
子类
11、内部类与抽象类
内部类
public class Outer01 {
public static class Inner01{
public static void run() {
System.out.println("run");
}
}
}
局部内部类
public class Outer05 {
public static void innerRun() {
class Inner01 {
public static void run() {
System.out.println("run");
}
}
Inner01.run();
}
}
匿名内部类
public class Outer09 {
public void innerRun() {
//Object()
new Object() {
public void run() {
System.out.println("run");
}
}.run();
}
}
抽象类
使用abstract修饰的类称之为抽象类
使用abstract修饰没有方法体的方法我们称之为抽象方法
具备抽象方法的类必须是抽象类
public abstract class Person {
public abstract void eat() ;
}