Java学习第九章 之 接口,多态

  1 /**
  2 
  3 接口是什么?
  4 
  5           接口是功能的集合,接口只描述所应该具备的方法,并没有具体实现
  6 
  7 接口定义时需要 interface关键字,接口里的方法需要实现类来实现,implements关键字
  8 
  9 接口中的方法均为公共访问的抽象方法,变量是被 public static final 修饰的,不可改变
 10 
 11 接口可以多实现,可以定义方法,方法也可以有修饰符,public abstract
 12 
 13 接口不可以创建对象,接口可以多继承,类继承类的同时,可以实现接口
 14 
 15 */
 16 
 17 /*
 18 
 19 定义一个接口
 20 
 21 */
 22 
 23 public interface Animal{
 24 
 25  public static void int a = 1; //a的值不能改变
 26 
 27   public void eat();
 28 
 29 }
 30 
 31 /*
 32 
 33 实现类
 34 
 35 */
 36 
 37 public class Cat implements Animal{
 38 
 39    public void eat(){
 40 
 41    }
 42 
 43 }
 44 
 45 
 46 
 47 /*
 48 
 49 接口多实现
 50 
 51 */
 52 
 53 public interface Fu1{
 54 
 55     public void show1();
 56 
 57 }
 58 
 59 public interface Fu2{
 60 
 61     public void show2();
 62 
 63 }
 64 
 65 /*
 66 
 67 实现类
 68 
 69 */
 70 
 71 public class Zi implements Fu1,Fu2{
 72 
 73      public void show1(){
 74 
 75      }
 76 
 77      public void show2(){
 78 
 79      }
 80 
 81 }
 82 
 83 /*
 84 
 85 类继承类,同时实现接口
 86 
 87 */
 88 
 89 public class Fu{
 90 
 91     public void show(){
 92 
 93 
 94 
 95     }
 96 
 97 }
 98 
 99 public interface  Fu2{
100 
101     public abstract void show2();
102 
103 }
104 
105 public class Zi extends Fu1 implements Fu2{
106 
107      public void show2(){
108 
109 
110 
111      }
112 
113 }
114 
115 /*
116 
117 接口多继承
118 
119 */
120 
121 public interface Fu1{
122 
123     public void show1();
124 
125 }
126 
127 public interface Fu2{
128 
129    public void show2();
130 
131 }
132 
133 public interface Fu3{
134 
135     public void show3();
136 
137 }
138 
139 public interface Fu4 extends Fu1,Fu2,Fu3{
140 
141     public void show4();
142 
143 }
144 
145 
146 
147 /**
148 
149 多态:父类引用变量指向子类对象,必须是子父类关系和类实现接口关系,父类引用变量调用方法时,会直接调用子类重写后的方法
150 
151 多态成员变量:
152 
153                     当父类子类中出现同名的变量是,多态调用该变量时:
154 
155                     编译时期:引用型变量所属类中是否有被调用的成员变量
156 
157                     运行时期:调用引用型变量所属类中的成员变量
158 
159 多态成员方法:
160 
161                     编译时期:引用变量所属的类,如果类中没有调用的方法,编译失败
162 
163                     运行时期:引用变量所指的对象所属的类,并运行对象所属类中的成员方法
164 
165 */
166 
167 public class Fu{
168 
169    int num = 1;
170 
171 }
172 
173 public class Zi extends Fu{
174 
175    int num = 2;
176 
177 }
178 
179 public class Test{
180 
181    public static void main (String[] args){
182 
183          Fu f = new Zi();
184 
185          System.out.println(f.num);
186 
187          Zi z = new Zi();
188 
189          System.out.println(z.num);
190 
191    }
192 
193 }
194 
195 
196 
197 public class Fu{
198 
199     int num = 1;
200 
201     public void show(){
202 
203     System.out.println("Fu");
204 
205     }
206 
207 }
208 
209 public class Zi{
210 
211    int num = 2;
212 
213    public void show(){
214 
215     System.out.println("Zi");
216 
217    }
218 
219 }
220 
221 public class Test{
222 
223     public static void main(String[] args){
224 
225               Fu f = new Zi();
226 
227               f.show();
228 
229      }
230 
231 }
232 
233 
234 
235 /*
236 
237 instanceof关键字   比较运算符
238 
239 */
240 
241 public interface  Person{
242 
243          public void eat();
244 
245 }
246 
247 public class Teacher  implements Person{
248 
249      public void eat(){
250 
251          System.out.println("老师吃饭");
252 
253      }
254 
255 }
256 
257 public class Student implements Person{
258 
259      public void eat(){
260 
261       System.out.println("学生吃饭");
262 
263      }
264 
265 public class Test{
266 
267    public static void main(String[] args){
268 
269           Person p = new Teacher();
270 
271           Person p2 = new Student();
272 
273           if(p instanceof Teacher){
274 
275                 p.eat();
276 
277            }
278 
279           if( p2 instanceof Student){
280 
281                  p2.eat();
282 
283          }
284 
285       }
286 
287   }
288 
289 }
290 
291 /*
292 
293 多态转型
294 
295 */
296 
297 public class Fu{
298 
299    public void show(){
300 
301      System.out.println("Fu");
302 
303    }
304 
305 }
306 
307 public class Zi{
308 
309    public void show(){
310 
311      System.out.println("Zi");
312 
313    }
314 
315 }
316 
317 public class Test{
318 
319     public static void main(String[] args){
320 
321           Fu f = new Zi();//向上造型
322 
323           Zi z = (Zi)f;//向下造型
324 
325      }
326 
327 }

 

posted @ 2020-03-31 21:47  蜡笔辛巴  阅读(135)  评论(0编辑  收藏  举报