Java继承多态封装
Posted ixinfu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java继承多态封装相关的知识,希望对你有一定的参考价值。
继承extends
-
继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法。
-
实现继承的格式 继承通过extends实现
格式:
class 子类 extends 父类 { }
举例:class Dog extends Animal { }
-
继承带来的好处
继承可以让类与类之间产生关系
子父类关系,产生子父类后,子类则可以使用父类中非私有的成员。 -
继承的好处和弊端(理解)
继承好处
提高了代码的复用性(多个类相同的成员可以放到同一个类中)
提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
继承弊端
继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性
继承的应用场景:
使用继承,需要考虑类与类之间是否存在is…a的关系,不能盲目使用继承
is…a的关系:谁是谁的一种,例如:老师和学生是人的一种,那人就是父类,学生和老师就是子类在子类方法中访问一个变量,采用的是就近原则。
- 子类局部范围找
- 子类成员范围找
- 父类成员范围找
- 如果都没有就报错(不考虑父亲的父亲…)
-示例代码:class Fu{ int num = 10; } class Zi{ int num = 20; public void show(){ int num = 30; System.out.println(num); } } public class Demo1{ public static void main(String[] args){ Zi z = new Zi(); z.show();//输出show方法中的局部变量30 } }
多态
什么是多态
- 同一个对象,在不同时刻表现出来的不同形态
多态的前提
- 要有继承或实现关系
- 要有方法的重写
- 要有父类引用指向子类对象
成员访问特点
- 成员变量
编译看父类(左边),运行看父类(右边) - 成员方法
编译看父类(左边),运行看父类(右边)
多态代码演示:
public class Color {
public void my(){
System.out.println("颜色");
}
}
public class ColorDAO {
public void use(Color c){
c.my();
}
}
public class green extends Color{
@Override
public void my() {
System.out.println("green");
}
}
public class red extends Color{
@Override
public void my() {
System.out.println("red");
}
}
public class Test {
public static void main(String[] args) {
ColorDAO co = new ColorDAO();
Color c = new red();
co.use(c);
green g = new green();
co.use(g);
}
}
封装
封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
- 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
- 要访问该类的代码和数据,必须通过严格的接口控制。
- 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
- 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
封装示例代码:
public class EncapTest{
private String name;
private String idNum;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public String getIdNum(){
return idNum;
}
public void setAge( int newAge){
age = newAge;
}
public void setName(String newName){
name = newName;
}
public void setIdNum( String newId){
idNum = newId;
}
}
public class RunEncap{
public static void main(String args[]){
EncapTest encap = new EncapTest();
encap.setName("James");
encap.setAge(20);
encap.setIdNum("12343ms");
System.out.print(
"Name : " + encap.getName()+ " Age : "+ encap.getAge()
);
//输出结果:Name : James Age : 20
}
}
以上是关于Java继承多态封装的主要内容,如果未能解决你的问题,请参考以下文章