[目录]
访问修饰符
public
protected
default 默认的
private 只能在本类中访问
面向对象的三大特征
封装
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
通过set get方法(一般是成对存在的)
加入限制条件
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {//加入限制条件
if (age > 50) {
System.out.println("超出上学年龄");
return age;
} else if (age < 3) {
System.out.println("不足上学年龄");
return age;
}
return age;
}
public void setAge(int age) {
this.age = age;
if (age > 50) {
System.out.println("超出上学年龄");
} else if (age < 3) {
System.out.println("不足上学年龄");
}
}
继承
关键字extends
super在子类中
super.调用父类属性或方法
super(参数)调用父类有参构造器 注意:只能在子类的构造器中使用,必须在构造器的第一行。
在调用子类之前需要先调用父类(例:父类创建一个有参构造器)
对象的初始化顺序
1.首先是父类的属性
2.父类的构造器
3.子类的属性
4.子类的构造器
package com.pb.javafeaturetest_fengzhuang;
/**
* 父类Person
* @author Administrator
*
*/
public class Person {
private String sex;
public int age = 10;
public String hair;
public Person() {//父类的无参构造器
System.out.println(age);
System.out.println("调用父类构造器");
}
public void sleep(){
System.out.println("正在家睡觉...");
}
private void eat(){
System.out.println("在吃饭...");
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getHair() {
return hair;
}
public void setHair(String hair) {
this.hair = hair;
}
}
package com.pb.javafeaturetest_fengzhuang;
/**
* Student子类 继承于Person
* @author Administrator
*
*/
public class Student extends Person {
public int age = 20;
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student() {//子类无参构造器
System.out.println(age);
System.out.println("调用子类构造器");
}
public static int add(int a,int b) {//共有的方法
return a+b;
}
}
//测试类
public class Test {
public static void main(String[] args) {
Student student = new Student();
student.setName("King");
student.sleep();
student.study();
}
}
多态
方法的覆盖(复写):
@Override
子类覆盖父类的方法
1.方法名称相同
2.返回值类型相同
3.参数列表相同
4.访问修饰符不能比父类更加严格
//父类中的sleep()方法
public void sleep(){
System.out.println("正在家睡觉...");
}
//子类复写父类的sleep()方法
public void sleep() {
System.out.println("在学校睡觉");
}
方法的重载:
方法名相同 参数列表不同
无关访问修饰符和返回值
//voice()方法重载
public class Dog extends Aniaml {
@Override // 表示下边的方法是复写方法
public void voice() {
System.out.println("汪汪汪~");
}
void voice(String name){
System.out.println("看见"+name+"立刻咬");
}
public String voice(int age){
return "看见年轻的就咬";
}
}
结果
Integer
Boolean
Byte
Character
Double
…
关键字
this 在方法中指的是调用该方法的对象
this在构造器中调用本类的有参构造器,必须写在第一行
instanceof 判断是否为一个类的对象
// 判断animal2是否为Dog的对象
if (animal2 instanceof Dog) {
// 强制类型转换
((Dog) animal2).voice(18);
System.out.println(((Dog) animal2).voice(18));
}
static
共有的属性,类的属性。
共有属性调用时 类名.属性名
共有的方法,类的方法。共有方法调用时 类名.方法名
//Student中定义的静态属性
public static String address = "北京";// 静态修饰 static 共有的属性
//Student中定义的静态方法
public static int add(int a, int b) {// 共有的方法
return a + b;
}
//测试类中
System.out.println(Student.address);// 静态属性用 类名.属性名
Student.add(5, 2);// 静态方法用 类名.方法名 方法中只能调用静态属性
System.out.println(Student.add(5, 2));
final
修饰的类表示最终的类 不允许被继承
修饰的方法表示最终的方法 不允许被重写(复写)
修饰的变量表示常量 不允许被修改
常量的命名规则:全部大写,中间用下划线隔开 例EYE_NUM
Object:查看API
toString()打印地址
hashCode()
equals()重写
@Override
public boolean equals(Object obj) {
if (obj != null) {
if (obj instanceof Student) {
boolean isTheSameId = ((Student) obj).id == this.id;
return true;
}
}
return false;
}
public class Test {
public static void main(String[] args) {
Student zhangsan = new Student();
zhangsan.setId(123);
zhangsan.setName("张三");
Student zhangsi = new Student();
zhangsi.setId(123);
zhangsi.setName("张思");
System.out.println(zhangsan.equals(zhangsi));
}
}
结果