大二电子信息工程小白一枚,想自学后端毕业去找工作,为了提高学习效率,想记录总结一下每天学习的内容,若有志同道合的小伙伴可以一起打卡,有大佬的话也希望能提一些建议,感谢!
4.29
今天学习时间有点多,学了好多内容,不过感觉有点走马观花了,这时写日记的作用就体现了,要写日记就不得不重新再去总结,哈哈
今天学的第一块是多态,多态也就是对象的多种形态,使用多态的前提是有继承或者实现的关系,然后有父类引用指向子类对象,有方法的重写,多态的好处是使用父类型作为参数,可以接收所有的子类对象,不过多态也有弊端,就是不能使用子类特有的功能,当然也有解决方法,就是使用强制类型转换
第二块是包和final,用一张图概括final
第三块是权限修饰符和代码块
第三块是抽象类和抽象方法
最后学了接口,不过还没学完
多态的代码笔记
package com.itheima.polymorphismdemo.polymorphismdemo01;
public class Test {
public static void main(String[] args) {
//创建对象(多态方式)
//Fu f = new Zi()
Animal a = new Dog();
//调用成员变量:编译看左边,运行也看左边
//编译看左边:javac编译代码的时候,会看左边父类中有没有这个变量,如果有,编译成功,如果没有,编译失败
//运行也看左边:java运行代码的时候,实际获取的就是左边父类中成员变量的值
System.out.println(a.name);//动物
//调用成员方法:编译看左边,运行看右边
//编译看左边:javac编译代码的时候,会看左边的父类有没有这个方法,如果有,编译成功,如果没有编译失败
//运行看右边:java运行代码的时候,实际上是运行的子类中的方法
a.show();//Dog--show方法
//理解
//Animal a = new Dog();
//现在用a去调用变量和方法
//a是Animal类型的,所以默认都会从Animal这个类中去找
//成员变量:在子类的对象中,会把父类的成员变量也继承下来。父:name 子:name
//成员方法:如果子类对方法进行了重写,那么在虚方法表中是会把父类的方法覆盖的
}
}
class Animal{
String name = "动物";
public void show(){
System.out.println("Animal--show方法");
}
}
class Dog extends Animal{
String name ="狗";
@Override
public void show() {
System.out.println("Dog--show方法");
}
}
class Cat extends Animal{
String name ="猫";
@Override
public void show() {
System.out.println("Cat--show方法");
}
}
package com.itheima.polymorphismdemo.polymorphismdemo02;
public class Test {
public static void main(String[] args) {
//创建对象(多态方式)
Animal a = new Dog();
//调编译看左边,运行也看左边
a.eat();
//多态的弊端
//不能调用子类的特有功能
//若调用子类的特有功能会报错,因为编译看左边,运行看左边
//在编译的时候会先检查父类中有没有这个方法,如果没有直接报错
//a.lookhome()
//解决方案:
//强制类型转换为子类的类型
//细节:转换的时候不能瞎转,如果转成其他类的类型。就会报错
// Dog c = (Dog)a;
// c.eat();
//Cat c = (Cat)a这样会报错
if(a instanceof Dog){
Dog d = (Dog)a;
d.lookhome();
}else if(a instanceof Cat){
Cat c = (Cat) a;
c.catchMouse();
}else{
System.out.println("没有这个类型,无法转换");
}
}
}
class Animal{
String name = "动物";
public void eat(){
System.out.println("动物在吃东西");
}
}
class Dog extends Animal{
String name ="狗";
@Override
public void eat() {
System.out.println("狗啃骨头");
}
public void lookhome(){
System.out.println("狗在看家");
}
}
class Cat extends Animal{
String name ="猫";
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void catchMouse(){
System.out.println("猫在抓老鼠");
}
}