zoukankan      html  css  js  c++  java
  • Java学习之面向对象(1.Object类,(1)toString方法,(2)equals方法,2.对象转型(casting),3.动态绑定与多态,4.抽象类(abstract),5.Final关键字)

    1.Object类

    Object类是所有Java类的根基类;

    如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类。

    piblic class Person{

    }

    等价于:

    public class Person extends Object{

    }

    (1)toString方法:

    a.Object类中定义有public.String toString()方法,其返回值是String类型,描述当前对象的有关信息。

    b.在运行String与其它类型数据的连续操作时(如:System.out.println("info"+person)),将自动调用该对象类的toString()方法。

    c.可以根据需要在用户自定义类型中重写toString()方法。

    什么情况下要重写toString,object类里的toString只是把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码。所以当你要想按照你想要的格式去字符串一些对象的时候,就需要重写toString了。比如一个Student对象,直接toString肯定是一个hash码。然而你想得到的比如是:name:***,age:***。这时就重写toString就是在toString里写:System.out.println(“name:”+student.getName);
    System.out.println(“age:”+student.getAge)。
     1 class Dog{
     2 public String toString(){                                             //注意:重写toString方法 "public String toString()"
     3 return "I'm a cool dog";
     4 }
     5 }
     6 public class Texttostring {
     7 public static void main(String[] args){
     8 Dog d=new Dog();
     9 System.out.println("d:"+d);                                       //System.out.println("d:"+d);等价于System.out.println("d:"+d.toString());
    10 }
    11 
    12 }

    输出结果:

    d:I'm a cool dog

    (2)equals方法:

    (a)public boolean equals(Object obj)方法,提供定义对象是否相等的逻辑。

    (b)Object的equals方法定义为:x.equals(y),当x和y是同一个对象的应用时返回true否则返回false。

    (c)可以格局需要在用户自定义类型中重写object方法。

    
    
     1 class Cat{
     2     private int color;
     3     private int height;
     4     private int weight;
     5     Cat(int color,int height,int weight){
     6         this.color=color;
     7         this.height=height;
     8         this.weight=weight;
     9     }
    10     public boolean equals(Object obj){
    11         if(obj==null) return false;
    12         else{
    13             if (obj instanceof Cat){                                     //判断obj是不是Cat对象的引用
    14                 Cat c=(Cat)obj;
    15                 if(c.color==this.color&&c.height==this.height&&c.weight==this.weight){
    16                     return true;
    17                 }
    18             }
    19         }
    20         return false;    
    21     }
    22 }
    23 
    24 public  class TextEquals {
    25 public static void main(String[] args){
    26     Cat c1=new Cat(1,1,2);
    27     Cat c2=new Cat(1,1,2);
    28     System.out.println(c1==c2);                                      //比较c1,c2的引用
    29     System.out.println(c1.equals(c2));
    30     String s1=new String("Hello");
    31     String s2=new String("Hello");
    32     System.out.println(s1==s2);                      //比较s1,s2的引用
    33     System.out.println(s1.equals(s2));
    34     }
    35 }
    
    
    
     

     输出结果:

    false
    true
    false
    true

    2.对象转型(casting):

    (a)一个基类的引用类型变量可以“指向”其子类的对象。

    (b)一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。

    (c)可以使用变量instanceof类名,来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。

    (d)子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)。

     1 class Animal{
     2     public String name;
     3     Animal(String name){
     4         this.name=name;
     5     }
     6 }
     7 class Cat extends Animal{
     8     public String eyecolor;
     9     Cat(String name,String eyecolor){
    10         super(name);
    11         this.eyecolor=eyecolor;
    12     }
    13 }
    14 class Dog extends Animal{
    15     public String furcolor;
    16     Dog(String name,String furcolor){
    17         super(name);
    18         this.furcolor=furcolor;
    19     }
    20 }
    21 public class Texttext {
    22 public static void main(String[] args){
    23     Texttext text=new Texttext();
    24     Animal a=new Animal("name");
    25     Cat c=new Cat("catname","blue");
    26     Dog d=new Dog("dogname","black");
    27     text.f(a);
    28     text.f(c);
    29     text.f(d);
    30 }
    31 
    32     public void f(Animal a){
    33         System.out.println("name:"+a.name);
    34         if(a instanceof Cat){
    35             Cat cat=(Cat)a;
    36             System.out.println(cat.eyecolor+"\t"+"eyes");
    37         }
    38             else if(a instanceof Dog){
    39                 Dog dog=(Dog)a;
    40                 System.out.println(dog.furcolor+"\t"+"fur");
    41                 
    42             }
    43         }
    44     }
    45     

    输出结果:

    name:name
    name:catname
    blue eyes
    name:dogname
    black fur

    3.动态绑定与多态

    (a)动态绑定是指在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用相应的方法。

    (b)多态的存在有3个必要条件:1.要有继承;2.要有重写;3父类对象指向子类对象。

     1 class Animal{
     2     public String name;
     3     Animal(String name){
     4         this.name=name;
     5     }
     6     public void enjoy(){
     7         System.out.println("叫声.....");
     8     }
     9 }
    10 class Dog extends Animal{
    11     private String furcolor;
    12     Dog(String name,String furcolor){
    13         super(name);
    14         this.furcolor=furcolor;
    15     }
    16     public void enjoy(){
    17         System.out.println("狗叫声.....");
    18     }
    19 }
    20 class Bird extends Animal{
    21     private String feathercolor;
    22     Bird(String name,String feathercolor){
    23         super(name);
    24         this.feathercolor=feathercolor;
    25     }
    26     public void enjoy(){
    27         System.out.println("鸟叫声......");
    28     }
    29     
    30 }
    31 class Cat extends Animal{
    32     private String eyecolor;
    33     Cat(String name,String eyecolor){
    34         super(name);
    35         this.eyecolor=eyecolor;
    36     }
    37     public void enjoy(){
    38         System.out.println("猫叫声....");
    39     }
    40     
    41 }
    42 class Lady extends Animal{
    43     private Animal mypet;
    44     Lady(String name,Animal mypet){
    45         super(name);
    46         this.mypet=mypet;
    47     }
    48     public void mypetenjoy(){
    49         mypet.enjoy();
    50     }
    51     
    52 }
    53 public class Textduotai {
    54 public static void main(String[] args){
    55     Cat cat=new Cat("shabi","yellow");
    56     Dog dog=new Dog("dashabi","pink");
    57     Bird bird=new Bird("xiaoshabi","purple");
    58     Lady l1=new Lady("erbi",cat);
    59     Lady l2=new Lady("daerbi",dog);
    60     Lady l3=new Lady("xiaoerbi",bird);
    61     l1.mypetenjoy();
    62     l2.mypetenjoy();
    63     l3.mypetenjoy();
    64 }

    输出结果:

    猫叫声....
    狗叫声.....
    鸟叫声.....

     4.抽象类(abstract)

     (a)用abstract关键字来修饰一个类时,这个类叫做抽象类;

       用abstract来修饰一个方法时,这个方法叫做抽象方法。

    (b)含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。

    (c)抽象类不能被实例化;

    (d)抽象方法只需声明,而不需实现。

     1 abstract class Animal{
     2     public String name;
     3     Animal(String name){
     4         this.name=name;
     5     }
     6     public abstract void enjoy();
     7 }
     8 class Dog extends Animal{
     9     private String color;
    10     Dog(String name,String color){
    11         super(name);
    12         this.color=color;
    13     }
    14     public void enjoy(){
    15         System.out.println("猫叫声....");
    16     }
    17 }
    18 public class TextAbstract {
    19 public static void main(String[] args){
    20     // Animal a=new Animal(); 错误! 抽象类不能被实例化;
    21     Dog dog=new Dog("abc","yellow");
    22     dog.enjoy();
    23 }
    24 }

    输出结果:

    猫叫声....

    5.Final关键字:

    (1)final的变量的值不能够被改变。       

      (a)final的成员变量;       public void m(final int j)     //j的值不能在方法中赋值。

      (b)final的局部变量(形参);        final int i=0;    //i的值不能改变。

    (2)final的方法不能够被重写。      public  final void m(){};            //m方法不能被重写。

    (3)final的类不能够被继承。      final clas T{}            //  T不能被继承。

    6.接口

  • 相关阅读:
    android布局
    Windows7 32/64位系统搭建Cocos2d-x及Android交叉编译环境
    第12章 文件管理
    第十章 多处理器和实时调度
    C语言实现多级反馈队列调度算法
    C++实现操作系统调度算法(FSFS,SJF,RR,多级反馈队列算法)
    多级反馈队列调度算法
    第九章 单处理器调度
    第六章 并发:死锁与饥饿
    第七章 内存管理
  • 原文地址:https://www.cnblogs.com/shide/p/2964496.html
Copyright © 2011-2022 走看看