继承与多态的学习
继承就是在原有代码的基础上增添新的功能和方法,可以使新的类有着和继承类的共性,而继承别的类的叫做子类,被继承的叫做父类
点击查看代码
class testUse {
String name = "";
int a = 0;
public testUse(String name) {
this.name = name;
}
}
public class TestUseFa extends testUse{
public TestUseFa() {
super("qwer");//
super.name = "123";
super.a = 0;
Use();
}
public void Use(){
super.a = 10;
}
}
public class test {
public static void main(String args[]){
TestUseFa test = new TestUseFa();
System.out.println(test.name);
System.out.println(test.a);
}
}
接下来是protected关建字了,他能在同一个包中调用,非同一个包内只有继承了才能使用
final能使变量变成常量,不能被更改和继承
多态
多态就是同一件事发生在不同对象就是产生不同结果
多态的发生要以下几个条件
1.必须在继承的条件下
2.子类对父类的方法进行重写
3.通过父类的引用调用重写的方法
点击查看代码
public class TestUseFa extends testUse{
String name;
public TestUseFa() {
super("qwer");//
}
@Override
public void Use(){
System.out.println("测试1");
}
}
public class TestUseFb extends testUse{
public TestUseFb() {
super("123");
}
@Override
public void Use(){
System.out.println("测试2");
}
}
class testUse {
String name = "";
int a = 0;
protected testUse(String name) {
this.name = name;
}
public void Use(){
System.out.println("123");
}
}
public class test {
public static void main(String args[]){
testUse test1 = new TestUseFa();//向上转型
test1.Use();
testUse test2 = new TestUseFb();
test2.Use();
}
}
向上转型,就是子类类型向父类转变
可以直接赋值,方法传参,返回值等实现向上转型
注意,通过向上转型后不能调用子类独一的方法,只能调用自己的
如果调用的方法会是子类重写过的,就会调用子类的方法,这个叫做动态绑定
动态绑定是编译时才确定(晚绑定),静态绑定时编译前就确定(早绑定)
有向上转型就有向下转型,即父类转型为子类,但这种可能会失败,不安全,用的也较少
避免在构造方法中调用重写方法
点击查看代码
class B {
public B() {
// do nothing
func();
}
public void func() {
System.out.println("B.func()");
}
}
class D extends B {
private int num = 1;
@Override
public void func() {
System.out.println("D.func() " + num);
}
}
public class Test {
public static void main(String[] args) {
D d = new D();
}
}
浙公网安备 33010602011771号