Java自学第一弹(对象和类,继承,多态和抽象类)

    xiaoxiao2021-03-25  98

      其实JAVA的面向对象的继承派生和C++差不多,如果有C++的基础再来学习JAVA语言,会轻松很多。

    对象和类继承多态和抽象类

    对象和类

      之前学过C++的话,这个地方直接照搬C++中的对象和类,然后注意一下区别的行了。例如类中的成员函数一般都是public的,其成员对象一般都是共有的。还有就是静态域和静态方法,下面会介绍。以及JAVA中没有析构函数,JAVA虚拟机自动调用finalize()函数来进行“析构”。

    定义类静态域和静态方法构造方法包

    定义类

      以下面的代码为例:

    类前面的修饰的作用 public class master{} //共有的类,可以被包内的其他类访问,加上import也可以被其他包的类访问 class master{} // 默认访问权限,只能被包内的类所访问 protect class master{} // 不同包的访问收到限制 private class master{} // 只有类本身的方法可以调用成员 封装和隐藏

      封装是一种将抽象性函数接口的实现细节部分包装、隐藏起来的方法。

    class master { private static String id; // 成员对象 id private String name; // 姓名 private char sex; // 性别 private static double money; // 钱 /** * @param args * @return */ public master(String i,String n,char s,double m){ //构造函数 setId(i); setName(n); setSex(s); setMoney(m); } public static String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public void Print(int i){ System.out.print(i); // 打印函数 } public void Print(){ System.out.print("id="+id+" name="+name+" money"+money); } }

    静态域和静态方法

    用关键字static标记变量和方法,叫做静态域和静态方法。

    静态域 private static int flag=0; ma1.setFlag(10); ma2.setFlag(11); System.out.print(ma1.getFlag());

    上面代码的系统输出为 11。

    静态方法

      静态方法是不能被对象访问操作的方法,这种方法没有this参数。例如,应用程序中的main()方法都是静态方法。

    构造方法

      如果类中没有构造方法,系统会调用默认的构造方法。 例如上面的那个类,它的默认的构造方法为:

    public master(){ id=null; name=null; sex='\u0000'; money=0; }

    也可以自己定义构造方法,一旦定义,系统就不能调用默认的构造方法. 还有一个知识点就是重载构造方法。(这个跟C++中的一样)

      Java和C++在组织类的方法是不同的,Java是通过包的概念组织类。使用Java包的概念避免名字冲突。

    包的导入 举个例子就很清楚了; import java.util.*; // 引入包java.util.*; import java.util.Date; // 引入类 java.util.Date;

    2.静态导入 static修饰

    import static java.lang.System.*; out.print("hello");//可以直接使用out.print()输出

    继承

    和C++十分类似。

    1.super构造方法的调用

    一般的格式为:

    public 子类名(子类构造方法参数){ super(父类构造方法参数); 其他域的赋值语句; }

    具体的例子如下:

    public class TeacherMaster extends master{ //TeacherMaster 继承master类 private int title; public TeacherMaster(String i, String n, char s, double m,int t) { super(i, n, s, m); title=t; } }

    2.封装和继承

      父类声明为private的数据域也被子类继承,但是具有私有属性,只能在父类定义的方法时访问。还是上面的例子,如果想改变money的值,只能访问setMoney()来改变money的值。   父类中声明为protected的数据域可以提供子类访问,包访问只有子类和父类在同一个包才能访问。   父类中声明的为public的数据域则没有限制。

    多态和抽象类

      关于多态还是说一下定义吧,多态性在面向对象程序中指的是相同的方法具有不同的表现形式。

    重载覆盖抽象类

    1.重载

      重载指的是在同一种类中的,还是直接代码举例:

    class master{ public void Print(int i){ System.out.print(i); // 打印函数 } public void Print(){ System.out.print("id="+id+" name="+name+" money"+money); } }

      上面的代码中Print()方法实现了重载。当调用Print()函数的时候就会去对应两个方法的一个,看哪种方法符合。

    ma1.Print(1) //调用了第一个方法。 ma1.Print() //调用了第二个方法。

    2.覆盖

      关于覆盖和重载所不同的是覆盖是子类覆盖父类中相同名称相同参数的方法。

    class master{ public void Print(int i){ System.out.print(i); // 打印函数 } } public class TeacherMaster extends master{ public void Print(int i){ System.out.print("zhanghanlun "+i); } }

      上面代码中的TeacherMaster类中的Print(int i)方法覆盖了master类中的Print(int i)方法。

    TeacherMaster ma1=new TeacherMaster(); ma1.Print(7);

      上面代码的运行结果为zhanghanlun 7,而不是7。   需要注意的是:子类的方法覆盖父类的方法的时候,方法的访问权限可以被扩大不可以被缩小;

    class master{ public void Print(int i){ System.out.print(i); // 打印函数 } } public class TeacherMaster extends master{ void Print(int i){ //错误 System.out.print("zhanghanlun "+i); } }

    3.抽象类

      抽象类概念,父类更加抽象,不应该向子类一样创建、使用自己的实例。

    abstract class master{ public abstract int getself(); } public class teacher extends master{ public int getself(){ // 在子类中具体实现方法 return 2; } } public class student extends master{ public int getself(){ return 3; } }

    下面代码的运行结果为:2 3

    teacher t1=new teacher(); student s1=new student(); System.out.print(t1.getself()+" "+s1.getself());
    转载请注明原文地址: https://ju.6miu.com/read-12580.html

    最新回复(0)