Java之路
继承
子类的继承性
子类和父类在同一个包中
子类自然地继承其父类不是private的成员变量和方法作为自己的成员变量和方法,
继承的成员变量和方法的访问权限保持不变
子类和父类不在一个包中
子类继承父类的protected、public成员变量和方法作为自己的成员变量和方法,
继承的成员变量和方法的访问权限保持不变
不能继承父类的友好变量和友好方法
成员变量的隐藏和方法重写
成员变量的隐藏
子类中声明的成员变量和父类的成员变量同名
class A {
double a;
}
class B extends A{
int a;
}
方法重写(方法隐藏)
子类中声明的方法名字、参数类型和参数个数和父类相同,方法内的行为可以发生改变
class A {
int f(int a,int b){
return a+b;
}
}
class B extends A{
int f(int a,int b){
return a*b;
}
}
关键词
super
super调用隐藏的成员变量和方法
super.隐藏变量成员
super.f();
super();
final
final不允许重写
修饰成员变量时,必须赋值并且不能改变
上转型对象和继承多态
上转型对象
class A{
public int f(int a,int b){
return a+b;
}
}
class B extends A{
public int f(int a,int b){
return a*b;
}
A a =new B();
a.f(a,b);
最后执行的结果返回a*b
继承、多态
class 动物{
void cry() {
}
}
class 狗 extends 动物{
void cry() {
System.out.println(" ");
}
}
class 猫 extends 动物{
void cry() {
System.out.println("");
}
}
public class A{
public static void main(String args[]){
动物 animal = new 狗();
animal.cry(); //animal 是狗的上转型对象
animal = new 猫() ;
animal cry();
}
}
abstract类和方法(抽象类)
abstract类在类名前面加abstract修饰词,abstract类可以有abstract方法和非abstract方法
abstract方法用abstract修饰不能用new运算符创建对象
abstract类多态
class 动物{
public abstract void cry();
}
class 狗 extends 动物{
public void cry() {
System.out.println(" ");
}
}
class 猫 extends 动物{
public void cry() {
System.out.println("");
}
}
public class Ssing{
public void sing(动物 animal){
animal.cry();
}
}
public class A{
public static void main(String args[]){
Ssing ssing = new Ssing();
ssing.sing(new 猫())
ssing.sing(new 狗())
}
}
接口
接口的声明和使用
接口使用关键字interface来声明
一个类通过使用关键词implements声明自己实现一个或多个接口,多个接口用逗号隔开
interface B {
}
interface C {
}
class A implements B,C
接口回调
interface 动物{
void cry();
}
class 狗 implements 动物{
void cry() {
System.out.println(" ");
}
}
class 猫 implements 动物{
void cry() {
System.out.println("");
}
}
public class A{
public static void main(String args[]){
动物 animal = new 狗();
animal.cry(); //animal 是狗的上转型对象
animal = new 猫() ;
animal cry();
}
}
接口的多态
interface 动物{
void cry();
}
class 狗 implements 动物{
public void cry() {
System.out.println(" ");
}
}
class 猫 implements 动物{
public void cry() {
System.out.println("");
}
}
public class Ssing{
public void sing(动物 animal){
animal.cry();
}
}
public class A{
public static void main(String args[]){
Ssing ssing = new Ssing();
ssing.sing(new 猫())
ssing.sing(new 狗())
}
}