面向对象的特性
封装、继承、多态(抽象)
这里写目录标题
封装
体现形式---方法,属性私有化通过提供的公共的访问方式来操作私有化属性的值,
提高数据的安全性。get-set方法
Alt+insert自动生成get-set方法
package cn.tedu.fengzhuang;
public class FDemo {
public static void main(String[] args) {
//创建Person类对象
Person p=new Person();
//操作对象的属性
//p.name="lili";
//p.age=10;
//调用方法间接的给类的私有化属性进行赋值
p.setAge(-10);
//p.gender='女';
//调用方法间接的获取类的私有化属性值
//System.out.println(p.name+","+p.gender+","+p.getAge());
}
}
//定义代表人的类
class Person{
//属性
//类中的所有属性都有数据安全性的问题,为了解决数据安全性的问题属性私有化
private String name;
//private 私有化 私有化的属性和方法不能直接使用
private int age;
private char gender;
//Alt+insert---弹出通用设置(找到getter and setter)
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;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
/*//定义方法给私有化的属性进行赋值
public void setAge(int age) {
if (age < 0) {
System.out.println("重新输入");
} else {
this.age = age;
}
}
//定义方法获取私有化属性的值
public int getAge(){
return age;
}*/
//有参构造
/*public Person(int age){
if(age<0){
System.out.println("请重新输入");
}else {
this.age=age;
}
}*/
//行为
public void eat(){
System.out.println(name+"在吃饭...");
}
}
继承
多个类中出现了重复的内容,把这些重复的内容放到新的类中,通过extends关键字让
原来的类和新的类产生了继承关系,原来的类称之为子类,新的类称之为父类。子类可以继承
父类部分信息(私有化信息和构造方法以及构造代码块)
首先,子类可以继承父类所有的成员。.对于特殊的 private 成员。子类仍然可以继
承,但是子类此时没有使用权,不能直接访问,这时候若需要访问,只能调用父类getter,sett
er方法来访问与赋值。
继承方式(树状图)
单继承 :
一个类只能有一个父类,一个类可以有多个子类(支持多级继承)
重写(覆盖)在父子类中
出现方法签名一致的方法称之为重写,遵守重写原则
(两等两小一大)
(如果方法签名一致java才会按照重写区检测是否遵守原则如果方法签名不一致
则不检测重写原则---方法签名一致是重写的前提)
一等:方法签名一致
二等:如果父类的方法返回值类型是基本数据类型/void,
那么子类和父类的方法返回值类型要保持一致。
一小:如果父类的方法返回值类型是引用数据类型,
那么子类的方法返回值类型要么是父类一致,要么是父类方法返回值类型的子类。
二小:子类的方法不能抛出比父类更大范围的编译时异常(可以相等,可以抛出运行时异常)
一大:子类的访问权限修饰符要么和父类一致要么大于父类的访问权限修饰符的范围。
本类 | 同包类 | 子类 | 其他类 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
默认(不写) | √ | √ | 同包子类 | × |
private | √ | × | × | × |
package cn.tedu.extendsx;
public class ExtendsDemo1 {
public static void main(String[] args) {
//创建医生类的对象
医疗人员 d =new 医疗人员();
Doctor a =new Doctor();
System.out.println(d);
System.out.println(a);
System.out.println( );
a.treat();
}
}
//父类、超类、基类
class 医疗人员{
//属性
String name;
int age;
char gender;
//科室
String dept;
//方法
public 医疗人员 treat(){
医疗人员 a = new 医疗人员();
System.out.println(name+"在治病救人...");
return a;
}
}
//定义代表医生的类
//通过extends关键字让类与类之间产生的关联关系----继承
//子类、派生类
class Doctor extends 医疗人员 {
public Nurse treat(){
Nurse a = new Nurse();
System.out.println(name+"拿着手术刀在治病救人..."
);
return a;
}
}
//定义代表护士的类
class Nurse extends 医疗人员 {
}
package cn.tedu.extendsx;
public class ExtendsDemo2 {
public static void main(String[] args) {
}
}
class EDemo{
//私有化 私有化属性或者方法只能在本类中访问
//子类访问不到父类的方法,子类定义的方法只要符合方法的语法即可
private void treat(){
}
}
//定义代表医生的类
//通过extends关键字让类与类之间产生的关联关系----继承
//子类、派生类
class EDemo1 extends EDemo{
public int treat(){
return 1;
}
}
多态
在程序操作过程中可以体现多种形式
从JAVA的时期来解释多态,编译时期和运行时期
编译时期多态(在编译时期绑定代码 体现形式---重载)
public void m(){……}
public void m(int i){……}
运行时多态(在运行时期绑定代码 体现形式---重写、向上造型---前提是继承)
向上造型
声明类是父类,实际创建类是子类,这样创建的对象就是向上造型
向上造型的对象可以调用哪些方法看父类,方法的具体执行看子类是否有重写