tag:blogger.com,1999:blog-6340079886099685381.post4130322357749224205..comments2024-02-09T14:20:03.502+05:00Comments on Магия программирования: Ответы на вопросы для собеседования по Java SE (Часть 3)Михаилhttp://www.blogger.com/profile/10532340303697596967noreply@blogger.comBlogger15125tag:blogger.com,1999:blog-6340079886099685381.post-38723536779578605812010-04-14T16:11:06.631+06:002010-04-14T16:11:06.631+06:002 Анонимный:
Насчет рефлекшн понятно.
А вот насче...2 Анонимный:<br />Насчет рефлекшн понятно.<br /><br />А вот насчет первого примера уже интереснее. Это не расширение видимости, а подход из серии метод-"павлик морозов". В классе B на самом деле уже другой метод, который имеет привилегию вызвать метод test() из класса A. Можно это проверить поставив @Override у метода из класса B и получив при этом ошибку компиляции. Это уже другой метод, но его сигнатура, и параметры совпадают.Михаилhttps://www.blogger.com/profile/10532340303697596967noreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-64044554689511008992010-04-13T17:23:14.568+06:002010-04-13T17:23:14.568+06:00пример через рефлекшен
import java.lang.reflect.Me...пример через рефлекшен<br />import java.lang.reflect.Method;<br /><br />public class Z {<br /><br /> public static void main(String[] args) {<br /> new D().test();<br /> }<br />}<br /><br />class C {<br /> private void test() {<br /> System.out.println("private C.test()");<br /> }<br />}<br /><br />class D extends C {<br /> public void test() {<br /> try {<br /> Class c = this.getClass().getSuperclass();<br /> Method privateMethod = c.getDeclaredMethod("test", null);<br /> privateMethod.setAccessible(true);<br /> privateMethod.invoke(c.newInstance());<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> }<br /> }<br />}Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-15450839562428168912010-04-13T16:27:21.187+06:002010-04-13T16:27:21.187+06:0013. Если у класса-родителя есть метод, объявленный...13. Если у класса-родителя есть метод, объявленный как private, может ли наследник расширить его видимость?<br /><br />может через рефлекшен<br />и вот так ещё может<br /><br />public class Z {<br /><br /> protected class A {<br /> private void test() {<br /> System.out.println("private A.test");<br /> }<br /> }<br /><br /> public class B extends A {<br /> public void test() {<br /> super.test();<br /> }<br /> }<br /><br /> public static void main(String[] args) {<br /> new Z().new B().test();<br /> }<br />}Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-84002301607186367222010-04-11T22:50:37.269+06:002010-04-11T22:50:37.269+06:00Вы указывайте конкретные места, где неверные рассу...Вы указывайте конкретные места, где неверные рассуждения присутствуют. Писалось это год назад, а за год многое успело поменяться в голове.Михаилhttps://www.blogger.com/profile/10532340303697596967noreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-4020449472085960912010-04-11T21:56:23.206+06:002010-04-11T21:56:23.206+06:002 и 3 статьи написаны очень невнимательно а местам...2 и 3 статьи написаны очень невнимательно а местами автор объясняет верные ответы неверными соображениями, которые видимо кроме как предложением "А мне так кажется, да и всю жизнь я так думал" не обоснованы.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-41336683478941689202010-03-08T17:38:03.916+05:002010-03-08T17:38:03.916+05:00Заждались!Заждались!Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-23290014259968063392010-03-07T02:18:26.844+05:002010-03-07T02:18:26.844+05:00ну где продолжение?)))ну где продолжение?)))Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-8851808961880990002009-11-19T11:34:17.610+05:002009-11-19T11:34:17.610+05:00Спасибо! Продолжение обязательно будет!Спасибо! Продолжение обязательно будет!Михаилhttps://www.blogger.com/profile/10532340303697596967noreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-87360108526203619532009-11-18T20:08:10.769+05:002009-11-18T20:08:10.769+05:00продолжение когда будет? уж оч понравилось. многое...продолжение когда будет? уж оч понравилось. многое не нужно в работе, но спрашивают на собеседованиях к сожалению, придется выучить(((Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-25847074532692478692009-10-26T18:56:25.927+05:002009-10-26T18:56:25.927+05:00Спасибо, очень полезная информация!
Было бы неплох...Спасибо, очень полезная информация!<br />Было бы неплохо продолжить список вопросов и ответов.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-36466482924221509232009-05-22T13:12:35.393+06:002009-05-22T13:12:35.393+06:00Исправил текст, в связи с найденными замечаниями.
...Исправил текст, в связи с найденными замечаниями.<br />Изменениям подверглись вопросы №12, 14, 16Михаилhttps://www.blogger.com/profile/10532340303697596967noreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-9473730322994422572009-05-22T11:53:14.848+06:002009-05-22T11:53:14.848+06:00Спасибо, за интересные комментарии! К своему стыду...Спасибо, за интересные комментарии! К своему стыду не знал(не помнил), что "protected в java дает доступ помимо наследников еще и из классов пэкеджа.".<br />Так, что вопрос про строгость package-private вполне корректен.<br />Сейчас исправлю сам текст.Михаилhttps://www.blogger.com/profile/10532340303697596967noreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-82191431021111507672009-05-20T23:43:33.722+06:002009-05-20T23:43:33.722+06:00Еще 5коп.
package – "моё и соседское". К полям, ме...Еще 5коп.<br />package – "моё и соседское". К полям, методам и классам, объявленным package, имеет доступ не только класс, в котором они объявлены, но и все классы, находящиеся в том же самом пакете. О том, что представляет собой пакет с точки зрения контроля доступа, речь пойдет ниже. Ключевого слова для обозначения этого уровня доступа, как я уже говорил, нет. Достаточно не указать любой другой.<br /><br />protected – "моё и всех наследников". К полям, методам и классам, объявленным protected, имеет доступ класс, в котором они объявлены, все классы, находящиеся в том же самом пакете и все классы, унаследованные от того, где сделано объявление. Для обозначения уровня доступа используется ключевое слово protected.<br /><br />Как видим - package более строг, чем protected. Вопрос вполне корректный.Anonymoushttps://www.blogger.com/profile/01750290513262602192noreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-69478031428685001542009-05-20T23:39:49.025+06:002009-05-20T23:39:49.025+06:00Ни один нестатический член класса не может инициро...Ни один нестатический член класса не может иницироваться нигде, кроме как в конструкторе. Поэтому final-переменные (нестатические) будут инициализироваться в начале выполнения конструктора. Код инициализации сгенерирует сама JDK.Anonymoushttps://www.blogger.com/profile/01750290513262602192noreply@blogger.comtag:blogger.com,1999:blog-6340079886099685381.post-41567274450588239122009-05-20T23:03:23.380+06:002009-05-20T23:03:23.380+06:00Ответ на #12 явно виден из таблицы, которая привед...Ответ на #12 явно виден из таблицы, которая приведена <A HREF="http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html" REL="nofollow">здесь</A>.<br />Также там применяется термин package-private и объясняется, что protected в java дает доступ помимо наследников еще и из классов пэкеджа.Anonymousnoreply@blogger.com