一、在一个类中重写toString方法

public class Person {
private String name;
private int age; public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public String toString() {
// {name=name , age= age}
return "{" + "name=" + getName() +
"age=" + getAge() +
"}";
} // 重写 equals @Override
public boolean equals(Object obj) {
// 判断内存地址是否相同
if( this == obj ){
return true;
}
// 判断 传入的obj的对象是否为空 obj的类型与当前类型是否相同
if ( obj == null || this.getClass() != obj.getClass() ){
return false;
} // 强转 类型
Person p = (Person) obj
// 判断传入的obj对象 的 值是否为空,判断值是否相同, return this.age == p.age && Objects. equals( this.name,p.name ) // 判断 值是否相同
}

二、泛型的定义和使用

  可以 灵活地 将数据类型应用到不同的  类、方法、接口中    将数据类型做为参数进行传递
 
 
 
 
 
  1。定义和使用含有泛型的类  ,方法,参数 
      定义格式:
          修饰符 class  类名 <代表泛型的变量>{    }
  
      例子:
      // 泛型在类中使用 定义的 位置   位于        类名 后
          public class Person <E>{
                  // 泛型作为参数   在   括号里
                  public boolean add (E e){
                  }
                  //  带有 泛型 方法  位于 替换 方法类型
                  public E get(int index){
                  
                  }
          }
  2.距离定义 泛型类
              public class MyGenericClass<MVP> {
          //没有MVP类型,在这里代表 未知的一种数据类型 未来传递什么就是什么类型
          private MVP mvp;
  
          public void setMVP(MVP mvp) {
              this.mvp = mvp;
          }
  
          public MVP getMVP() {
              return mvp;
          }
      }
      
  3.  含有泛型的 方法 定义的格式
      格式:
          修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
  
          public class MyGenericMethod {
          public <MVP> void show(MVP mvp) {
              System.out.println(mvp.getClass());
          }
  
          public <MVP> MVP show2(MVP mvp) {
              return mvp;
          }
      }
  
  4.含有泛型的接口
      定义格式:
              修饰符 interface 接口名 <代表泛型的变量>{ }
              
       public interface  MyGenericInterface<E>{
                 public abstract void add(E e);
  
                  public abstract E getE(); 
       }
 
 
 
      在定义类的时候 确定泛型 的类型 
          例如:
                  public class MyImp1 implements MyGenericInterface<String> {
                          @Override
                          public void add(String e) {
                              // 省略...
                          }
​
                          @Override
                          public String getE() {
                              return null;
                          }
                }
      
      2、始终不确定泛型的类型,直到创建对象时,确定泛型的类型
          public class MyImp2<E> implements MyGenericInterface<E> {
              @Override
              public void add(E e) {
                   // 省略...
              }
  
              @Override
              public E getE() {
                  return null;
              }
          }
      /**
      确定泛型
      */
  
          public class GenericInterface {
              public static void main(String[] args) {
                  MyImp2<String>  my = new MyImp2<String>();  
                  my.add("aa");
              }
          }
一、泛型的通配符
      当使用 泛型类 或者接口时,传递的数据中,泛型的类型不确定,可以通过通配符<?>表示。但是一旦使用泛型通配符后,
   只能使用Object类的共性方法,集合中自身方法无法使用。
      
      1.通配符基本使用
              泛型的通配符的:不知道什么时候用什么类型 来 接受的时候, 此时 可以使用 ? 表示未知通配符
              
              例子:
                      public static void main(String[] args) {
                              Collection<Intger> list1 = new ArrayList<Integer>();
                              getElement(list1);
                              Collection<String> list2 = new ArrayList<String>();
                              getElement(list2);
                          }
                          public static void getElement(Collection<?> coll){}
                          //?代表可以接收任意类型
 
              Notes:
tips:泛型不存在继承关系 Collection<Object> list = new ArrayList<String>();这种是错误的; 2.通配符高级使用----受限泛型
之前设置泛型的时候,实际上是可以任意设置的,只要是类 就可以设置。但是在Java的泛型中可以制定一个泛型的上线和下限 泛型的上限:
格式: 类型名称<? extends 类> 对象名称
意义:只能接收该 类型及其子类 泛型的下限:
格式 : 类型的名称<? super 类> 对象名称
意义: 只能 接收该类型 及其父类类型
                  例子:
public static void main(String[] args) {
Collection<Intger> list1 = new ArrayList<Integer>();
Collection<String> list2 = new ArrayList<String>();
Collection<Number> list3 = new ArrayList<Number>();
Collection<Object> list4 = new ArrayList<Object>(); getElement(list1);
getElement(list2);//报错
getElement(list3);
getElement(list4);//报错 getElement2(list1);//报错
getElement2(list2);//报错
getElement2(list3);
getElement2(list4); } // 泛型的上限:此时的泛型?,必须是Number类型或者Number类型的子类
public static void getElement1(Collection<? extends Number> coll){}
// 泛型的下限:此时的泛型?,必须是Number类型或者Number类型的父类
public static void getElement2(Collection<? super Number> coll){}

常见数据结构:

栈、队列、数组、链表和红黑树。

Java重写toString和泛型的使用的更多相关文章

  1. java重写toString()方法

    toString()方法是Object类的方法,调用toString()会返回对象的描述信息. 1)为什么重写toString()方法呢? 如果不重写,直接调用Object类的toString()方法 ...

  2. java重写toString方法

    在输出对象属性时,重写toString按照你希望的输出形式重写 object类里的toString只是把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码.所以当你要想按 ...

  3. Effective Java 第三版——12. 始终重写 toString 方法

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  4. java 中重写toString()方法

    toString()方法 一般出现在System.out.println(类名.toString()); toString()是一种自我描述方法 本身返回的是 getClass().getName() ...

  5. java打印和重写toString

    class Person { private String name; public Person(String name) { this.name=name; } } public classPri ...

  6. java实体类如果不重写toString方法,会如何?

    先认识一下Object Object 类的 toString 方法 返回一个字符串,该字符串由类名(对象是该类的一个实例).at 标记符“@”和此对象哈希码的无符号十六进制表示组成.换句话说,该方法返 ...

  7. 【java基础】为什么重写toString()方法?

    不得不说,有很多java初学者写java实体类的时候,并没有真正理解重写toString() 方法,可能是口头知道也可能是跟风随带添加toString() 方法,并没有真正理解其意义,如果真要被问起来 ...

  8. java继承 、方法重写、重写toString方法

    1.Java的继承,关键词Extends package cn.mwf.oo; public class TextExtends { public static void main(String[] ...

  9. 在java中为啥要重写toString 方法?

    在java中为啥要重写toString 方法?下面以一个简单的例子来说明. 先定义一个test5类.并写它的get,set方法. package test5; public class Test5 { ...

随机推荐

  1. WebView之禁止调用第三方浏览器

    一.WebView官方简洁: 一个显示视图的web页面.在这个类的基础上你可以滚自己的web浏览器或简单地显示一些网上的内容.它使用WebKit渲染引擎显示web页面,包括方法向前和向后导航历史,放大 ...

  2. Excel frequency函数

    计算连续次数最常用的函数就是FREQUENCY,下面就这个函数在计算连续次数的应用做一个详细图解.首先,我们需要了解一下FREQUENCY函数的计算原理.    FREQENCY(数据区域,用于设置区 ...

  3. 【第六课】Nginx常用配置下详解

    目录 Nginx常用配置下详解 1.Nginx虚拟主机 2.部署wordpress开源博客 3.部署discuz开源论坛 4.域名重定向 5.Nginx用户认证 6.Nginx访问日志配置 7.Ngi ...

  4. [CF1062F]Upgrading Cities[拓扑排序]

    题意 一张 \(n\) 点 \(m\) 边的 \(DAG\) ,问有多少个点满足最多存在一个点不能够到它或者它不能到. \(n,m\leq 3\times 10^5\) 分析 考虑拓扑排序,如果 \( ...

  5. 手撸orm

    ORM简介 ORM即Object Relational Mapping,全称对象关系映射.当我们需要对数据库进行操作时,势必需要通过连接数据.调用sql语句.执行sql语句等操作,ORM将数据库中的表 ...

  6. Linux 入门记录:十二、Linux 权限机制

    一.权限 权限是操作系统用来限制资源访问的机制,权限一般分为读.写.执行. 系统中每个文件都拥有特定的权限.所属用户及所属组,通过这样的机制来限制哪些用户.哪些组可以对特定的文件进行什么样的操作. 每 ...

  7. Egret(白鹭引擎)——Egret+fairyGui 实战项目入门

    前言 一行白鹭上青天 需求 最近,我们老板刷刷的为了省事,给美术减压(背景有点长,不说了). 美术出 fairygui,我需要在网页上看到实时操作,并且看到效果! 需求分析 这怕是要了我的狗命啊,但是 ...

  8. 浅谈android Service和BroadCastReceiver

    1.题记 Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序. 广播接收者(BroadcastRece ...

  9. 杂谈---小故事小道理,面试中的小技巧(NO.2)

    本篇是接着上一篇面试随笔的,上一次有猿友反应写的有些“扯淡”,LZ思来想去最大的原因可能是由于上一章写的全是一些大忌,既然是大忌,那么在现实当中发生的概率还是相对较小的,大部分人还是很少在面试中犯如此 ...

  10. mongodb分片集群

    第一章 1.mongodb 分片集群解释和目的 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础. 第二章 1. ...