java learn5

继承:Java的继承只允许单继承,即一个类只能有一个父类。

1.super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。

this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。

参考:https://www.cnblogs.com/hasse/p/5023392.html

class Person { 
    public static void prt(String s) { 
       System.out.println(s); 
    } 
   
    Person() { 
       prt("父类·无参数构造方法: "+"A Person."); 
    }//构造方法(1) 
    
    Person(String name) { 
       prt("父类·含一个参数的构造方法: "+"A person's name is " + name); 
    }//构造方法(2) 
} 
    
public class Chinese extends Person { 
    Chinese() { 
       super(); // 调用父类构造方法(1) 
       prt("子类·调用父类”无参数构造方法“: "+"A chinese coder."); 
    } 
    
    Chinese(String name) { 
       super(name);// 调用父类具有相同形参的构造方法(2) 
       prt("子类·调用父类”含一个参数的构造方法“: "+"his name is " + name); 
    } 
    
    Chinese(String name, int age) { 
       this(name);// 调用具有相同形参的构造方法(3) 
       prt("子类:调用子类具有相同形参的构造方法:his age is " + age); 
    } 
    
    public static void main(String[] args) { 
       Chinese cn = new Chinese(); 
       cn = new Chinese("codersai"); 
       cn = new Chinese("codersai", 18); 
    } 
}
ans:
父类·无参数构造方法: A Person.
子类·调用父类”无参数构造方法“: A chinese coder.
父类·含一个参数的构造方法: A person's name is codersai
子类·调用父类”含一个参数的构造方法“: his name is codersai
父类·含一个参数的构造方法: A person's name is codersai
子类·调用父类”含一个参数的构造方法“: his name is codersai
子类:调用子类具有相同形参的构造方法:his age is 18

2.不同访问属性的父类成员在子类中的访问属性

多态:对象变量可以保存其声明的类型的对象,或该类型的任何子类型的对象。子类对象可以放在父类对象的容器中。

*造型Cast

1.子类的对象可以赋值给父类的变量(注意:java中不存在对象对对象的赋值); 父类的对象不能赋值给子类的变量。

Vechicle v;
Car c1 = new Car();
v = c1;//可以
Car c2 = v;//编译错误,逻辑没问题,因为v实际管理的是Car变量
Car c2 = (Car)v;//可以

2.向上造型(即子类的对象可以赋值给父类的变量)不需要运算符,因为其是安全的。

Vechicle v = new Car();

3.函数的绑定

静态绑定:根据变量的声明类型来决定

动态绑定:根据变量的动态类型来决定(java默认此类)

在成员函数中调用其他成员函数也是通过this这个对象变量来调用的。

4.覆盖override

子类和父类中存在名称和参数表完全相同的函数,这一对函数构成覆盖关系;通过父类的变量(存储着所管理的对象)调用存在覆盖关系的函数时,会调用变量当时所管理的对象所属的类的函数。

5.object类

ref:https://blog.csdn.net/lhgwp/article/details/75808331

0

java learn3

private:只有这个类的内部可以访问

1.类内部指定的成员函数以及定义初始化(成员变量)

2.同一个类之间可以通过对象来访问私有变量

public:定义类名是必须和java文件同名(仅有一个)

包:引用不同包里面的类时,需要import 包名.类名或者直接引用:

main.Clock c =new main.Clock(); //main是包名

static:static是不允许用来修饰局部变量

1.类变量:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化

Clock.value; //通过类名直接访问
Clock c1=new Clock();
c.value;   //可以通过对象访问,但是是属于类的,所有对象共享同一个。

2.类函数:在静态方法中不能直接访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

注:非静态方法都可以直接访问任何变量或函数。                                                               ref:https://www.cnblogs.com/dolphin0520/p/3799052.html

0