java多态的特性与理解

多态:不同的对象使用相同的行为可以产生不同的行为结果。

多态的表现形式:
1.子类与父类之间的重写。
2.类内部的重载。
3.不同类对相同接口的实现。

多态的优点:
1.符合设计模式中的依赖倒转原则,针对接口编程,依赖于抽象而不是具体,降低了耦合度。
2.提高了代码的扩展性,新增行为不会对原来的代码产生影响。
3.提高了代码的灵活性,可以灵活的对产生相同行为的对象进行替换。

.
.
.
.
重写:
发生于子类与父类之间
条件:1.子类与父类间有继承关系。2.子类重写父类的方法。3.父类的引用指向子类的对象。

例:

父类

public class ParentTest {

    public void getFamily() {
        Log.d(TAG, "爷爷");
    }
}

子类A

public class TestA extends ParentTest {
    private final String TAG="TestA";

    public void getFamily() {
        Log.d(TAG, "爸爸");
    }
}

子类B

public class TestB extends ParentTest {
    private final String TAG="TestB";
    @Override
    public void getFamily() {
        Log.d(TAG, "妈妈");
    }
}

main方法调用

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//调用父类的方法 
	   new ParentTest().getFamily();
//调用子类A方法
        ParentTest familyMember=new TestA();
        familyMember.getFamily();
//调用子类B方法
         familyMember=new TestB();
        familyMember.getFamily();

    }



}

打印结果:
ContentValues: 爷爷
TestA: 爸爸
TestB: 妈妈

上述代码体现了子类与父类之间的多态,并且可以发现TestB与TestA可以灵活的互相替换,并且相同的行为返回的结果不同。这也验证了多态的灵活性。

.
.
.

重载:
指在类的内部,方法名相同但是其传递参数的数量与类型不同且返回类型各不相同。

例:

public class Test {

    public String getType(int type){
        return "传入的是int";
    }

    public String getType(String type){
        return "传入的是String";
    }

    public String getType(boolean type){
        return "传入的是boolean";
    }
}

public class MainActivity extends AppCompatActivity {

    private final String TAG="MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Test test=new Test();
        Log.d(TAG, test.getType(1));
        Log.d(TAG, test.getType("a"));
        Log.d(TAG, test.getType(true));
    }



}

结果
在这里插入图片描述
接口实现: 不同的类实现相同的接口,通过接口的引用调用不同对象的相同行为。

例:

接口

public interface ParentTest {

    void getTest();
}

接口实现类TestA

public class TestA implements ParentTest {
    
    private final String TAG="TestA";
    
    @Override
    public void getTest() {
        Log.d(TAG, "TestA");
    }
}

接口实现类TestB

public class TestB implements ParentTest {
    private final String TAG="TestB";
    @Override
    public void getTest() {
        Log.d(TAG, "TestB");
    }
}

public class MainActivity extends AppCompatActivity {

    private final String TAG="MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
	//使用接口引用进行调用
        ParentTest test=new TestA();
         test.getTest();

         test=new TestB();
        test.getTest();

    }



}

结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_24856205/article/details/100008843