今天主要学习了java的三大特征:封装,继承,多态
主要内容围绕以下:
封装
基本概念
对成员变量进行密封包装数处理,来隐藏成员变量的细节以及保证成员变量数值的合理性
实现流程
1、私有化成员变量
2、提供公有的get/set方法
3、提供无参/有参/全参的构造方法
4、重写toString0、equalsi和hashCode0
继承
概念
public class Worker extends Person
表示Worker类继承自Person类Person类叫做超类、父类、基类
Worker类叫做派生类、子类、孩子类
注意事项
(1)子类不能继承父类的构造方法和私有方法,但私有成员变量可以被继承只是不能直接访问
(2)无论使用何种方式构造子类的对象时都会自动调用父类的无参构造方法,来初始化从父类中继承的成员变量,相当于在构造方法的第一行增加代码:super(的效果。
重写
基本概念
从父类中继承下来的方法不满足子类的需求时,就需要在子类中重新写一个和父类一样的方法来覆盖从父类中继承下来的版本
重写原则
a.要求方法名相同、参数列表相同以及返回值类型相同,从jdk1.5开始允许返回子类类型
b.要求方法的访问权限不能变小,可以相同或者变大
c.要求方法不抛出更大的异常(异常机制)
d,声明为static和private的方法不能被重写,但是能够被再次声明
接口
概念
如果一个类中的全部方法都是抽象方法,全部属性都是全局常量,那么此时就可以将这个类定义成一个接口
1、全局常量编写时,可以省略public stat1ic final关键字,例如:
public static final String INF0="内容":
简写后:
String INF0="内容":
2、抽象方法编写时,可以省略
public abstract关键字,
例如:
public abstract void print();
简写后:
void print ()
多态
概念
如果一个类中的全部方法都是抽象方法,全部属性都是全局常量,那么此时就可以将这个类定义成一个接口
1、全局常量编写时,可以省略public stat1ic final关键字,例如:
public static final String INF0="内容":
简写后:
String INF0="内容":
2、抽象方法编写时,可以省略
public abstract关键字,
例如:
public abstract void print();
简写后:
void print ()
优点
1、降低程序的耦合性
2、易于程序的扩展
3、有利于程序的维护
接口的实现
格式:
class子类implements 父接口1,父接口2...{
以上的代码称为接口的实现。那么如果一个类即要实现接口,又要继承抽象类的话,则按照以下的格式编写即可:
class子类extends父类implements父接口1,父接口2...{
}
多态效果
(1)当父类类型的引用指向子类类型的对象时,父类类型的引用可以直接调用父类独有的方法
(2)当父类类型的引用指向子类类型的对象时,父类类型的引用不可以直接调用子类独有的方法
(3)对于父子类都有的非静态方法来说,编译阶段调用父类版本,运行阶段调用子类重写的版本
(4)对于父子类都有的静态方法来说,编译和运行阶段都调用父类版本
多态
代码练习
继承
父类
package Person;
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
void say() {
System.out.println("姓名:" + name + " 年龄:" + age);
}
}
子类
package Person;
public class Nurse extends Person{
public Nurse() {
}
@Override
void say() {
System.out.println("我是护士!");
}
}
package Person;
public class Worker extends Person{
int salary;
public Worker(String name, int age, int salary) {
super(name, age);
this.salary = salary;
}
public Worker(int salary) {
this.salary = salary;
}
public void say() {
System.out.println("姓名:" + name + " 年龄:" + age + " 薪水:" + salary);
}
}
测试类
package Person;
public class PersonWorkerTest {
public static void main(String[] args) {
Person p = new Person("小柳" ,20);
Person w = new Worker("大柳",20,100);
p.say();
w.say();
}
}
接口
package Interface;
public interface Runner {
void running();
}
package Interface;
public interface Hunter extends Runner{
void hunt();
}
package Interface;
public class Chinese implements Hunter{
@Override
public void hunt() {
System.out.println("抓到一个小兔子");
}
@Override
public void running() {
System.out.println("正在快速的奔跑");
}
}
测试
package Interface;
public class ChineseTest {
public static void main(String[] args) {
Runner runner = new Chinese();
runner.running();
Hunter hunter = new Chinese();
hunter.hunt();
}
}
以上就是今天所学!