• 学习博客之Java继承多态接口


    这一篇博客主要是对软工前一阶段学习的总结,主要是对Java的学习总结,包括三部分:Java的继承、多态和接口

    Java的继承

    继承是面向对象的三大特性之一,能够实现软件的复用。
    Java子类继承父类的语法格式如下

    class SubClass extends SuperClass
    {
    		//类定义部分
    }
    

    Java继承的特点:

    • Java只有单继承,即每个子类都只有一个直接父类。
    • 子类继承父类,可以获得父类全部成员变量和方法
    • 子类不能获得父类的构造器

    子类重写父类的方法

    • 子类和父类的方法名形参列一样
    • 方法的重写遵循“两小一大”的原则,即子类返回值类型应比父类返回值类型更小或相等;子类方法声明抛出的异常应比父类方法声明抛出的异常更小或相等;子类方法的访问权限应比父类方法的访问权限更大或相等
    • 当子类覆盖了父类方法后,子类的对象无法访问父类中被覆盖的方法,但可以在子类方法中调用父类中被覆盖的方法,使用super.方法名(被覆盖的如果是类方法, 则用父类类名)

    调用父类构造器

    • 子类构造器调用父类构造器用super调用来完成,且必须出现在子类构造器执行体中的第一行
    • 父类构造器总是在子类构造器之前执行

    下面是一个Java继承的简单例子,该例子中包含,类的继承、子类重写父类方法、super的使用

    
    package example;
    
    class Person{
    	private String name;
    	private int age;
    	public Person(String name,int age){
    		this.name=name;
    		this.age=age;
    	}
    	public void setName(String name) {
    		this.name=name;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setAge(int age) {
    		this.age=age;
    	}
    	public int getAge() {
    		return age;
    	}
    	
    	public void sayHello() {
    		System.out.println("Hello,I am "+name);
    	}
    }
    
    class Student extends Person{
    	private int number;
    	private String school;
    	public void SetNumber(int number) {
    		this.number=number;
    	}
    	public int getNumber() {
    		return number;
    	}
    	public void setSchool(String school) {
    		this.school=school;
    	}
    	public String getSchool() {
    		return school;
    	}
    	public  Student(String name,int age,int number,String school) {
    		super(name,age);
    		this.number=number;
    		this.school=school;
    	}
    	public void sayHello() {
    		System.out.println("I am a student of "+school+"and my name is "+getName());
    	}
    
    }
    public class ExampleOfExtend {
    	public static void main(String[] args) {
    		Student stu=new Student("Xiao wang", 19, 123, "Fzu");
    		System.out.println(stu.getName());
    		System.out.println(stu.getAge());
    		System.out.println(stu.getNumber());
    		System.out.println(stu.getSchool());
    		stu.sayHello();
    	}
    }
    
    

    以上是我在学习Java继承中总结出来的一些知识点,还包括了自己写的一个例子。

    Java的多态

    Java允许把一个子类对象直接赋给父类引用变量,无需任何类型转换。如果子类对象赋给父类的引用变量,当运行调用该引用变量的方法时,其方法行为总是表现出子类方法的行为特征,而不是父类方法的特征,这就可能出现:相同类型的变量、调用同一个方法时呈现出不同的行为特征,这就是多态。

    下面将结合一个例子来讲解多态

    class BaseClass
    {
    	public int book = 6;
    	public void base()
    	{
    		System.out.println("父类的普通方法");
    	}
    	public void test()
    	{
    		System.out.println("父类的被覆盖的方法");
    	}
    }
    class SubClass extends BaseClass
    {
    	public String book = "Java";
    	public void sub()
    	{
    		System.out.println("子类的普通方法");
    	}
    	public void test()
    	{
    		System.out.println("子类的覆盖父类的方法");
    	}
    	
    	
    }
    
    public class ExampleOfPolymorphism {
    	public static void main(String[] args)
    	{
    		BaseClass pl= new SubClass();  //将子类对象赋给父类变量,可能发生多态
    		System.out.println(pl.book);  //访问的是父类对象的实例变量
    		pl.base();  //将执行从父类继承到的base()方法
    		pl.test();  //将执行从子类的test()方法
    		// pl.sub();这一行代码编译时将会出现错误,因为pl的编译类型是BaseClass,BaseClass类没有提供sub方法
    	}
    }
    
    

    上面程序定义了一个BaseClass类,有一个变量book,两个方法:base和test;一个子类SubClass,有一个同名变量book,两个方法:sub、改写父类方法的test。在主函数中声明了BaseClass类型的po,但实际赋给这个变量的是SubClass类型。通过pl.book调用的是父类的变量,表明对象的实例变量不具有多态性。其他执行时所调用的方法已经写在代码注释上,不再赘述。

    还有一点要提的是引用类型的转换。子类的对象可以直接赋给父类的引用变量,无需经过任何转型(向上转型)。如果要将一个父类对象转换成子类类型,则这个对象必须实际上是子类实例才行。

    以上就是我在学习Java多态时的总结和自己写的一个例子。

    java接口

    接口里不能包含普通方法,接口里的所有方法都是抽象方法,接口是从多个相似类中抽象出来的规范。Java8对接口进行了改进,允许在接口中定义默认方法,默认方法可以提供方法实现。
    Java中接口的定义

    [修饰符] interface 接口名 extends 父接口1,父接口2...{
    	零到多个常量定义...
    	零到多个抽象方法定义...
    	零到多个内部类、接口、枚定义...
    	零到多个默认方法或类方法定义...//Only in java8
    }
    

    对比类定义,接口定义少了初始化块和构造器,且接口成员变量只能是静态常量(成员变量总是是public static final来修饰,可以省略),接口方法只能是抽象方法、类方法或默认方法(方法总是用public abstract来修饰,可以省略)。接口里的变量都必须指定初始值,接口里普通方法不能有方法体实现,类方法和默认方法必须有方法体实现。一个Java文件最多只能有一个public修饰的接口,如果定义了一个public接口,需与主文件名一致。

    下面是一个简单的接口定义和继承的例子

    interface interfaceA{
    	int a=5;
    	void testA();
    }
    interface interfaceB extends interfaceA{ //interfaceB继承了interfaceA
    	int b=6;
    	void testB();
    }
    
    public class ExampleOfPolymorphism {
    	public static void main(String[] args)
    	{
    		System.out.println(interfaceB.a);
    		System.out.println(interfaceB.b);
    	}
    }
    

    以上是我学习Java接口中的一些总结和一个简单的例子。

    总结

    通过《软工》,自己在以前的基础上学习了Java,但是还是只停留在一个很浅的水平上,像Java的AWT编程和Swing编程还没学习,希望在接下去的半学期,自己能多多少少再学一些。

  • 相关阅读:
    用dt命令搜索查看符号
    烦人的异常
    _NT_SYMBOL_PROXY
    Windbg常用命令系列---.f+, .f- (切换Local Context)
    Windbg常用命令系列---.dumpcab (创建dump CAB文件)
    Windbg常用命令系列---.dump(创建dump文件)
    Windbg常用命令系列---!mapped_file
    Windbg常用命令系列---!cppexr
    再谈FPO
    Windbg常用命令系列---!stl
  • 原文地址:https://www.cnblogs.com/startup-try/p/7856024.html
Copyright © 2020-2023  润新知