泛型的通配符的三种应用情况

package com.java.GeneriationDmeo.www;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

//写个动物的父类
class Animal{
 private String name;
 private String Sex;

public Animal() {
  super();
  // TODO Auto-generated constructor stub
 }
 
 public Animal(String name, String sex) {
  super();
  this.name = name;
  Sex = sex;
 }

public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getSex() {
  return Sex;
 }
 public void setSex(String sex) {
  Sex = sex;
 }
 @Override
 public String toString() {
  return "Animal [name=" + name + ", Sex=" + Sex + "]";
 }
 
}
//创建狗类继承父类
class Dog extends Animal{
 private String name;
 private String sex;

public Dog() {
  super();
 }

public Dog(String name, String sex) {
  super(name, sex);
  this.name=name;
  this.sex=sex;
 }
 
 public String getName() {
  return name;
 }

public void setName(String name) {
  this.name = name;
 }

public String getSex() {
  return sex;
 }

public void setSex(String sex) {
  this.sex = sex;
 }

@Override
 public String toString() {
  return "Dog [name=" + name + ", sex=" + sex + "]";
 }
 
}
//创建一个猫类继承父类
class Cat extends Animal{
 private String name;
 private String sex;
 
 public Cat() {
  super();
 }
 public Cat(String name, String sex) {
  super(name, sex);
  this.name=name;
  this.sex=sex;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
 @Override
 public String toString() {
  return "Cat [name=" + name + ", sex=" + sex + "]";
 } 
}

public class GeneriationTest {

public static void main(String[] args) {
  //创建一个Hashset集合
  HashSet<Dog> set1=new HashSet<Dog>();
  set1.add(new Dog("小黄","雌性"));
  set1.add(new Dog("小黑","雄性"));
  HashSet<Cat> set2=new HashSet<Cat>();
  set2.add(new Cat("心如","雌性"));
  set2.add(new Cat("冰冰","雌性"));
  //迭代器
  printList(set1);
 }
 /**
  * 通用迭代器
  * @param set
  */
 private static void printList(HashSet<? extends Animal> set) {
  for (Iterator<? extends Animal> it = set.iterator(); it.hasNext();) {
   System.out.println(it.next());
   
  }
 }
}
/*
 *
 * 不同的集合类型以及不同的元素类型 在同一个方法中调用的时候,我们可以传入通配符来使方法得到扩展
 * 通配符有三种使用方法
 * 1.<?>不加任何限制的
 * 2<? extends 类型1> 称为上限   可以传入类型1或者类型1的子类
 * 3<? super 类型1>称为下限   可以传入类型1或者类型1的父类
 *
 * /

时间: 2024-10-06 13:12:33

泛型的通配符的三种应用情况的相关文章

C++_针对char 字符类型cout的三种输出情况(++ch 和 ch+1 和 ch++)难点加重点

1.++ch,代表字符+1输出,比如输入是a,那么输出是b 1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 char ch; 6 cout << "输入,我将重复\n"; 7 cin.get(ch); 8 while (ch != '.') //表示输入以点号结束 9 { 10 if (ch == '\n') //判断输入流中的字符是否为换行符 11 cout << ch;

Win10专业版桌面没有图标的三种情况及解决方法

正常情况,用户进入Win10系统桌面的时候会看到administrator文件夹.计算机.回收站.网络等图标,但有朋友进入桌面后什么图标都没有,这是怎么回事,Win10桌面没有图标可以分为三种情况,下面我们来看下这三种情况的具体解决方法. 一.系统图标消失 桌面右键进入个性化窗口,在主题选项找到桌面图标设置,在桌面图标设置中找到你想要显示的系统图标. 二.全部图标消失 这个时候很有可能是网上赌博桌面图标被隐藏起来了,鼠标右键进入查看选项后勾选,显示桌面图标. 三.桌面图标和任务栏一起消失 1.应

Java中OutOfMemoryError(内存溢出)的三种情况及解决办法

相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识. 在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识.jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永久保存区域).Heap space(堆区域).Java Stacks(Java栈).其中永久保存区域主要存放Class

华为初级——字符个数统计(三种情况)

第一种情况: 描述:写出一个程序,接受一个有字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数.不区分大小写. 知识点:字符串,函数,指针   题目来源:内部整理   练习阶段:初级   运行时间限制:10Sec  内存限制:128MByte  输入:输入一个有字母和数字组成的字符串,和一个字符.   输出:输出输入字符串中含有该字符的个数.  样例输入: ABCDEF A                    样例输出: 1 源程序: #include<iostream>

js+jquery+html实现在三种不通的情况下,点击图片放大的效果

js+jquery+html实现在三种不通的情况下,点击图片放大的效果. 三种情况分别是:图片的父元素宽高固定;  图片的宽高固定;  图片的父元素宽固定,高度不固定 第一种情况:图片的父元素宽高固定: 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <title>Title</title> 7

链表中插入一个节点的三种情况

在链表中插入一个元素可以分为三种情况: 1.在节点的时候 2.在链表中间的任意位置 3.在链表的最后位置,也可以认为这种情况为追加(这个就留到追加的时候来实现) 下面是代码的实现 SN *Insert_S_Node( SN *head ) /* 传入的参数是被插入链表中的头指针 */ { SN *Insert_Node=NULL, *Dest_Node = NULL; /* Insert_Node是将要做成的新链表中的节点 Dest_Node是要插入的节点*/ INT32 OSM = 1, i3

Tomcat内存溢出的三种情况及解决办法分析

转自 http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380147d8c8c4668d4e419ce3b4c413037bfa6663f405a8e906b6075aa1f0ce9f03176370123b5989b8908dcac925f75ce786a6459db0144dc4ee59a1167877bcd06feaf68bce6e732e2e88893880705dd53742bddaccd095b4

SSO单点登录三种情况的实现方式详解

单点登录(SSO——Single Sign On)对于我们来说已经不陌生了.对于大型系统来说使用单点登录可以减少用户很多的麻烦.就拿百度来说吧,百度下面有很多的子系统——百度经验.百度知道.百度文库等等,如果我们使用这些系统的时候,每一个系统都需要我们输入用户名和密码登录一次的话,我相信用户体验肯定会直线下降.当然,对于个人博客这类系统来说根本就用不上单点登录了. 假如,我们的系统很庞大,但是就是这一个系统,并没有什么子系统.这时我们也不需要单点登录.我们需要的是搭建集群环境,这里虽说只有一个系

java中内部类的创建四种情况,三种方式,及内部数据访问权限

内部类和外部类的关系,及内部静态类的数据访问权限,声明方式. 第一种,在外部类内部声明使用内部类,内部类的类型为static和非 static类型,内部类数据类型为private,protected,public 类型的访问权限.外部类为非静态声明和权限如下: package com; public class Test1 { //@author 张春蕾 private class Name{ private int i =1; public int s = 2; protected int m