多态:不同的对象使用相同的行为可以产生不同的行为结果。
多态的表现形式:
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可以灵活的互相替换,并且相同的行为返回的结果不同。这也验证了多态的灵活性。
扫描二维码关注公众号,回复:
11324954 查看本文章
.
.
.
重载:
指在类的内部,方法名相同但是其传递参数的数量与类型不同且返回类型各不相同。
例:
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();
}
}
结果