有谁能告诉我这两个代码之间的主要区别是什么?
代码1:
Fragment fragment = new NaviagtionFragment();
fragmentTransaction.replace(R.id.pager, fragment);
fragmentTransaction.commit();
代码2:
NavigationFragment fragment = new NavigationFragment();
fragmentTransaction.replace(R.id.pager, fragment);
fragmentTransaction.commit()
答案 0 :(得分:3)
两个选项都会实例化NavigationFragment
并将其替换为pager
内的一个。所以在运行期间完全没有区别。
唯一的区别在于编译时的方法/实例变量可见性。
声明
Fragment fragment
您将看不到NavigationFragment
的自定义方法/实例变量。但是,如果你没有对fragment
做任何其他事情,那么第一个选项就完全正常了。
答案 1 :(得分:3)
在第一种情况下,您将对象分配给基类,在第二种情况下分配给派生类。主要区别在于您无法访问第一种情况下的派生方法和属性,只能访问基类型中的方法和属性(没有强制转换)